Почему значения NULL стоят первыми при упорядочении DESC в запросе PostgreSQL?

Когда вы когда-нибудь захотите сначала получить NULLS при заказе запроса по убыванию или по возрастанию?

На мой взгляд, в подавляющем большинстве случаев желаемое поведение, будь то сортировка по возрастанию или по убыванию, будет NULLS LAST. Вместо этого мы должны указать NULLS FIRST.

2 ответа

Решение

На самом деле, с порядком сортировки по умолчанию (ASCENDING) NULL значения идут последними.

Логика диктует, что порядок сортировки будет изменен с DESCENDING ключевое слово, поэтому в этом случае на первом месте стоят NULL.

Но лучшая часть приходит последней: вы можете выбрать, какой вы хотите:

Цитирую текущее руководство, версия 9.3 на момент написания:

Если NULLS LAST указано, нулевые значения сортируются после всех ненулевых значений; если NULLS FIRST указано, нулевые значения сортируются перед всеми ненулевыми значениями. Если ни то, ни другое не указано, поведение по умолчанию NULLS LAST когда ASC указан или подразумевается, и NULLS FIRST когда DESC указано (таким образом, по умолчанию действует так, как будто значения NULL больше, чем значения NULL). когда USING указано, порядок нуля по умолчанию зависит от того, является ли оператор оператором меньше или больше.

Жирный акцент мой.

Простой ответ заключается в том, что именно так люди, которые написали Postgres, создали его. Цитировать:

Нулевое значение сортируется выше, чем любое другое значение. Другими словами, при возрастающем порядке сортировки нулевые значения сортируются в конце, а при убывающем порядке сортировки нулевые значения сортируются в начале.

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

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

Другие вопросы по тегам