PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Trier les valeurs nulles après toutes les autres, sauf spécial

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