Sortuj wartości NULL do końca tabeli


97

Czy w PostgreSQL istnieje sposób na sortowanie wierszy z NULLwartościami w polach do końca wybranej tabeli?

Lubić:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

Odpowiedzi:


178

Przede wszystkim wartości NULL sortowane jako ostatnie w domyślnej kolejności rosnącej . Nie musisz robić nic więcej.

Problem dotyczy kolejności malejącej , która jest odwrotnością idealną i dlatego najpierw sortuje wartości NULL. Roztwór @Mosty podkreślić, został wprowadzony PostgreSQL 8.3 :

ORDER BY somevalue DESC NULLS LAST

W przypadku PostgreSQL 8.2 i starszych lub innych RDBMS bez tej standardowej funkcji SQL można zastąpić:

ORDER BY (somevalue IS NULL), somevalue DESC

FALSEsortuje wcześniej TRUE, więc wartości NULL znajdują się na końcu, tak jak w powyższym przykładzie.

Powiązana odpowiedź później:


2
IMHO w większości rzeczywistych aplikacji chciałbyś, aby wartości null trwały niezależnie od kolejności. Na przykład sortowanie DESC według opcjonalnego znacznika czasu, imienia, nazwiska, ... więc wydaje mi się to naprawdę podejrzane, chociaż wydaje się sensowne, że matematycznie kolejność DESC jest przeciwieństwem ASC. Może wartości zerowe mają po prostu należeć do własnej kategorii i nie powinny mieć na nie wpływu ASC, DESC i zawsze umieszczane na końcu, to byłoby lepsze domyślne.
Christophe Roussy

Może to wpłynąć na indeksy, jeśli są to DESC. Może mógłbyś też o tym dodać? postgresql.org/message-id/…
Christophe Roussy

@ChristopheRoussy: Indeksy pasujące do kolejności sortowania są dotykane w połączonej odpowiedzi powyżej.
Erwin Brandstetter

3
Osobiście uważam, że domyślne powinno być odwrotnie: wartości NULL znajdują się na pierwszym miejscu w porządku rosnącym, a na końcu w porządku malejącym. To znacznie bardziej intuicyjne, ponieważ NULL to „najmniejsza” wartość.
Stephen

1
Dla osób pochodzących z MYSQL to lol? Po pierwsze, dlaczego został tak zbudowany. LUB czy Mysql nadmiernie zoptymalizował wynik
CodeGuru

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.