Más simple:
SELECT *
FROM tasks
ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
¿Cómo?
Postgres tiene un boolean
adecuado tipo (a diferencia de algunos otros RDBMS). Puede ordenar por él como por cualquier otro tipo de datos. Y puede ser NULL como cualquier otro tipo de datos. El orden de clasificación predeterminado es:
FALSE (0)
TRUE (1)
NULL
(sort IS NOT DISTINCT FROM -1)
se evalúa como FALSE
para todos los valores excepto -1
- que evalúa TRUE
y ordena al último. Simplemente agregue sort
como secundario ORDER BY
elemento.
Alternativa equivalente:
SELECT *
FROM tasks
ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
db<>violín aquí
Sqlfiddle antiguo