Что происходит, когда ORDER BY присваивается номер? - PullRequest
0 голосов
/ 25 апреля 2011

Я только начал изучать MySQL, и в книге, которую я читаю, есть следующий пример:

SELECT last_name, first_name, birth FROM president
ORDER BY IF(birth IS NULL,0,1), birth DESC;

Что я хотел бы знать, так это то, как эти числа (0 и 1) влияют на поведение ORDER BY - когда вы даете ORDER BY число, что оно делает с ним?

Подсказка, которую я обнаружил, заключается в том, что случайный порядок выполняется следующим образом:

SELECT * from TABLE ORDER BY rand();

Но я до сих пор не знаю, почему это работает.

1 Ответ

3 голосов
/ 25 апреля 2011

Он упорядочивает данные так, что строки, в которых IF(birth IS NULL, 0, 1) возвращает 0, появляются перед строками, в которых он возвращает 1.

Возможно, вы заметите, что это сильно отличается от того, что происходит, если вы напишите:

ORDER BY 1;

В этом случае он упорядочивается по первому столбцу в списке результатов.Это устаревший синтаксис, но он все же требуется стандартом SQL.

...