Когда вы когда-нибудь захотите NULLS сначала при заказе нисходящего или восходящего запроса?
По-моему, подавляющее большинство того времени, когда желаемое поведение, будь то сортировка по восходящей или нисходящей, будет NULLS LAST. Вместо этого нам нужно будет указать NULLS FIRST.
Ответ 1
Собственно, с порядком сортировки по умолчанию (ASCENDING
) значения NULL приходят последними.
Логика диктует, что порядок сортировки должен быть отменен с помощью ключевого слова DESCENDING
, поэтому в этом случае сначала появляются NULL.
Но самая лучшая часть - последняя: вы можете выбрать способ, которым вы хотите:
Цитирование текущего руководства, версия 9.3 с момента написания:
Если указано NULLS LAST
, нулевые значения сортируются после всех непустых значения; если указано NULLS FIRST
, нулевые значения сортируются перед всеми ненулевые значения. Если ни один из них не указан, поведение по умолчанию NULLS LAST
, когда ASC
указывается или подразумевается и NULLS FIRST
, когда DESC
(таким образом, значение по умолчанию должно действовать так, как будто значения null больше чем ненулевые). Когда указано USING
, порядок нулевых значений по умолчанию зависит от того, является ли оператор меньшим или большим, чем оператор.
Смелый акцент мой.
Ответ 2
Простой ответ объясняется тем, как это создавали люди, которые писали Postgres. Чтобы процитировать:
Значение null сортируется выше любого другого значения. Другими словами, с возрастающим порядком сортировки нулевые значения сортируются в конце, а в порядке убывания сортировки нулевые значения сортируются в начале.
Предполагается, что вы указали предложение ORDER BY, если у вас нет, то строки возвращаются случайным образом.
Если указано предложение ORDER BY, возвращаемые строки сортируются в указанном порядке. Если ORDER BY не задан, строки возвращаются в любом порядке, который система находит быстрее всего.