PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Classificando valores nulos após todos os outros, exceto especial


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

Como?


O Postgres tem um boolean adequado tipo (ao contrário de alguns outros RDBMS). Você pode ordenar por ele como por qualquer outro tipo de dados. E pode ser NULL como qualquer outro tipo de dados. A ordem de classificação padrão é:
FALSE (0)
TRUE (1)
NULL

(sort IS NOT DISTINCT FROM -1) avalia como FALSE para todos os valores, exceto -1 - que avalia TRUE e classifica por último. Basta adicionar sort como secundário ORDER BY item.

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

db<>mexa aqui
antigo sqlfiddle