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