Mysql
 sql >> база данни >  >> RDS >> Mysql

тире в MySQL ред по клауза

Отговорът е във въпроса:

Ключовата дума тук е "израз" . Можете да използвате изрази в ORDER BY клауза.

ORDER BY -order_line_groups.sequence DESC

е аритметичен израз и "тире" не е тире, а минус; унарен минус математически оператор.

Как работи?

По отношение на резултата, той работи както се очаква:

  • Ако типът на колоната order_line_groups.sequence е числов тип или тип дата и час (те също се съхраняват вътрешно като числа), след което минусът обръща реда на върнатите редове. Клаузата е еквивалентна на

      ORDER BY order_line_groups.sequence ASC
    
  • Ако типът на колоната е тип низ след това MySQL се опитва да преобразува стойностите от колоната към числа (тъй като изваждането е аритметична операция и не е дефинирано за низове). Когато MySQL преобразува низове в числа, той спира на първия знак, който не е цифра. В зависимост от данните, които съхранявате в колона order_line_groups.sequence , повече или по-малко от стойностите на низовете му ще се преобразуват в число 0 .

По отношение на скоростта, както е обяснено в страницата с документация, предоставена във въпроса, MySQL не може да използва индекси за разрешаване на ORDER BY . Това прави заявката бавна.

Заключение

Използване на ORDER BY -order_line_groups.sequence прави заявката бавна. Нещо повече, той не предоставя добър начин за сортиране на набора от резултати, когато типът на колоната sequence е тип низ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да трансформирате вертикални данни в хоризонтални данни с SQL?

  2. Как да добавите разделител към конкатениран низ в MySQL – CONCAT_WS()

  3. Как мога да преброя броя на публикациите, които имат или нула, или положителна оценка?

  4. Използване на SSH тунелиране като VPN алтернатива

  5. ГРЕШКА 1366 (HY000):Неправилна стойност на низа:„\xF0\x9F\x98\x9C“ за колона „коментар“ на ред 1