Urutkan nilai NULL ke akhir tabel

95

Apakah ada cara dengan PostgreSQL untuk mengurutkan baris dengan NULLnilai dalam bidang ke akhir tabel yang dipilih?

Suka:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END
helle
sumber

Jawaban:

173

Pertama-tama, nilai NULL yang diurutkan terakhir dalam standar menaik rangka. Anda tidak perlu melakukan hal ekstra.

Masalah ini berlaku untuk urutan menurun , yang merupakan kebalikan sempurna dan dengan demikian mengurutkan nilai NULL terlebih dahulu. The solusi @Mosty keluar menunjuk diperkenalkan dengan PostgreSQL 8.3 :

ORDER BY somevalue DESC NULLS LAST

Untuk PostgreSQL 8.2 dan yang lebih lama atau RDBMS lainnya tanpa fitur SQL standar ini, Anda dapat menggantinya:

ORDER BY (somevalue IS NULL), somevalue DESC

FALSEmengurutkan sebelumnya TRUE, jadi nilai NULL menjadi yang terakhir, seperti pada contoh di atas.

Terkait jawaban nanti:

Erwin Brandstetter
sumber
2
IMHO di sebagian besar aplikasi dunia nyata Anda ingin nilai nol bertahan apa pun urutannya. Misalnya mengurutkan DESC pada stempel waktu opsional, nama depan, nama belakang, ... jadi saya merasa benar-benar mencurigakan meskipun tampaknya masuk akal bahwa urutan DESC secara matematis adalah kebalikan dari ASC. Mungkin null hanya untuk berada dalam kategori mereka sendiri dan tidak terpengaruh oleh ASC, DESC dan selalu diletakkan terakhir, itu akan menjadi default yang lebih baik.
Christophe Roussy
Ini bisa mempengaruhi indeks jika mereka DESC mungkin Anda bisa menambahkan catatan tentang itu juga? postgresql.org/message-id/…
Christophe Roussy
@ChristopheRoussy: Indeks yang cocok dengan urutan disentuh dalam jawaban yang ditautkan di atas.
Erwin Brandstetter
3
Secara pribadi saya pikir defaultnya seharusnya sebaliknya: NULL muncul pertama dalam urutan naik, dan terakhir dalam urutan menurun. Itu jauh lebih intuitif, karena NULL adalah nilai "terkecil".
Stephen
1
Untuk orang yang datang dari MYSQL, ini adalah lol? Kenapa dibangun seperti ini? ATAU apakah Mysql lebih mengoptimalkan hasil
CodeGuru