Jednodušší:
SELECT *
FROM tasks
ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
Jak?
Postgres má správný boolean typu (na rozdíl od některých jiných RDBMS). Můžete podle něj objednávat stejně jako podle jakéhokoli jiného datového typu. A může být NULL jako jakýkoli jiný datový typ. Výchozí pořadí řazení je:
FALSE (0)
TRUE (1)
NULL
(sort IS NOT DISTINCT FROM -1) vyhodnotí jako FALSE pro všechny hodnoty kromě -1 - který vyhodnotí TRUE a řadí jako poslední. Stačí přidat sort jako sekundární ORDER BY položka.
Ekvivalentní alternativa:
SELECT *
FROM tasks
ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
db<>zde hrajte
Starý sqlfiddle