Ordina i valori NULL alla fine di una tabella


95

C'è un modo con PostgreSQL per ordinare le righe con i NULLvalori nei campi alla fine della tabella selezionata?

Piace:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

Risposte:


171

Prima di tutto, i valori NULL vengono ordinati per ultimi in ordine crescente predefinito . Non devi fare niente in più.

Il problema si applica all'ordine discendente , che è l'inverso perfetto e quindi ordina per primi i valori NULL. La soluzione indicata da @Mosty è stata introdotta con PostgreSQL 8.3 :

ORDER BY somevalue DESC NULLS LAST

Per PostgreSQL 8.2 e versioni precedenti o altri RDBMS senza questa funzionalità SQL standard è possibile sostituire:

ORDER BY (somevalue IS NULL), somevalue DESC

FALSEordina prima TRUE, quindi i valori NULL vengono per ultimi, proprio come nell'esempio sopra.

Risposta successiva correlata:


2
IMHO nella maggior parte delle applicazioni del mondo reale vorresti che i valori nulli durassero qualunque sia l'ordine. Ad esempio, l'ordinamento DESC su un timestamp opzionale, nome, cognome, ... quindi trovo davvero sospetto anche se sembra avere senso che matematicamente l'ordine DESC sia l'opposto di ASC. Forse i null devono essere solo in una categoria a parte e non dovrebbero essere influenzati da ASC, DESC e messi sempre per ultimi, sarebbe stato un valore predefinito migliore.
Christophe Roussy

Potrebbe influenzare gli indici se sono DESC, forse potresti aggiungere una nota anche su questo? postgresql.org/message-id/…
Christophe Roussy

@ChristopheRoussy: gli indici che corrispondono all'ordinamento vengono toccati nella risposta collegata sopra.
Erwin Brandstetter

3
Personalmente penso che il valore predefinito avrebbe dovuto essere l'opposto: i NULL vengono prima in ordine crescente e ultimi in ordine decrescente. È molto più intuitivo, poiché NULL è il valore "più piccolo".
Stephen

1
Per le persone provenienti da MYSQL, questo è un lol? Perché è stato costruito in questo modo in primo luogo. OPPURE Mysql ha ottimizzato eccessivamente il risultato
CodeGuru

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.