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