PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ordinamento dei valori nulli dopo tutti gli altri, eccetto speciale

Più semplice:

SELECT *
FROM   tasks
ORDER  BY (sort IS NOT DISTINCT FROM -1), sort;

Come?

Postgres ha un corretto boolean tipo (a differenza di altri RDBMS). Puoi ordinare da esso proprio come da qualsiasi altro tipo di dati. E può essere NULL come qualsiasi altro tipo di dati. L'ordinamento predefinito è:

FALSE (0)
TRUE (1)
NULL

(sort IS NOT DISTINCT FROM -1) restituisce FALSE per tutti i valori tranne -1 - che valuta TRUE e gli ordina per ultimi. Basta aggiungere sort come ORDER BY secondario elemento.

Alternativa equivalente:

SELECT *
FROM   tasks
ORDER  BY (sort IS DISTINCT FROM -1) DESC, sort;

db<>gioca qui
Sqlfiddle vecchio