Сортировка значений NULL в конец таблицы


95

Есть ли способ с PostgreSQL сортировать строки со NULLзначениями в полях до конца выбранной таблицы?

Подобно:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

Ответы:


172

Во- первых, значения NULL будут отсортированы в прошлом по умолчанию по возрастанию порядке. Вам не нужно делать ничего лишнего.

Вопрос касается нисходящего порядка, который является идеальным обратным и , таким образом сортирует значения NULL первым. Решение @Mosty Указал было введено с PostgreSQL 8.3 :

ORDER BY somevalue DESC NULLS LAST

Для PostgreSQL 8.2 и старше или других СУБД без этой стандартной функции SQL вы можете заменить:

ORDER BY (somevalue IS NULL), somevalue DESC

FALSEсортируется раньше TRUE, поэтому значения NULL идут последними, как в примере выше.

Связанный позже ответ:


2
ИМХО в большинстве приложений реального мира вам нужно, чтобы нулевые значения продолжались независимо от порядка. Например, сортировка DESC по необязательной метке времени, имени, фамилии ... так что я нахожу это действительно подозрительным, хотя кажется логичным, что математически порядок DESC противоположен ASC. Может быть, нули просто должны быть в отдельной категории и не должны подвергаться влиянию ASC, DESC и всегда ставиться последними, это было бы лучшим вариантом по умолчанию.
Кристоф Русси

Это может повлиять на индексы, если они DESC. Может быть, вы тоже можете добавить примечание об этом? postgresql.org/message-id/…
Кристоф Русси

@ChristopheRoussy: индексы, соответствующие порядку сортировки, затронуты в связанном ответе выше.
Эрвин Брандштеттер,

3
Лично я считаю, что по умолчанию должно было быть наоборот: NULL идут сначала в порядке возрастания, а последними - в порядке убывания. Это гораздо более интуитивно понятно, поскольку NULL - это «наименьшее» значение.
Стивен

1
Для людей, пришедших с MYSQL, это лол? Почему он был построен именно так? ИЛИ Mysql чрезмерно оптимизировал результат
CodeGuru

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.