Plus simple :
SELECT *
FROM tasks
ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
Comment ?
Postgres a un boolean approprié type (contrairement à certains autres SGBDR). Vous pouvez trier par celui-ci comme par n'importe quel autre type de données. Et il peut être NULL comme n'importe quel autre type de données. L'ordre de tri par défaut est :
FALSE (0)
TRUE (1)
NULL
(sort IS NOT DISTINCT FROM -1) évalue à FALSE pour toutes les valeurs sauf -1 - qui évalue TRUE et trie en dernier. Ajoutez simplement sort comme secondaire ORDER BY élément.
Alternative équivalente :
SELECT *
FROM tasks
ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
db<>jouez ici
Vieux sqlfiddle