По-просто:
SELECT *
FROM tasks
ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
Как?
Postgres има подходящ boolean
тип (за разлика от някои други RDBMS). Можете да поръчате по него точно както по всеки друг тип данни. И може да бъде NULL като всеки друг тип данни. Редът на сортиране по подразбиране е:
FALSE (0)
TRUE (1)
NULL
(sort IS NOT DISTINCT FROM -1)
оценява на FALSE
за всички стойности с изключение на -1
- който оценява TRUE
и сортира последно. Просто добавете sort
като вторичен ORDER BY
елемент.
Еквивалентна алтернатива:
SELECT *
FROM tasks
ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
db<>цигулка тук
Стар sqlfiddle