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