Prostsze:
SELECT *
FROM tasks
ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
Jak?
Postgres ma poprawny boolean
typ (w przeciwieństwie do niektórych innych RDBMS). Możesz uporządkować według niego, tak jak według każdego innego typu danych. I może mieć wartość NULL, jak każdy inny typ danych. Domyślna kolejność sortowania to:
FALSE (0)
TRUE (1)
NULL
(sort IS NOT DISTINCT FROM -1)
ocenia na FALSE
dla wszystkich wartości z wyjątkiem -1
- który ocenia TRUE
i sortuje ostatnie. Po prostu dodaj sort
jako dodatkowe ORDER BY
element.
Równoważna alternatywa:
SELECT *
FROM tasks
ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
db<>graj tutaj
Stary sqlfiddle