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