sql >> Base de Datos >  >> RDS >> PostgreSQL

Ordenar valores nulos después de todos los demás, excepto especiales

Más simple:

SELECT *
FROM   tasks
ORDER  BY (sort IS NOT DISTINCT FROM -1), sort;

¿Cómo?

Postgres tiene un boolean adecuado tipo (a diferencia de algunos otros RDBMS). Puede ordenar por él como por cualquier otro tipo de datos. Y puede ser NULL como cualquier otro tipo de datos. El orden de clasificación predeterminado es:

FALSE (0)
TRUE (1)
NULL

(sort IS NOT DISTINCT FROM -1) se evalúa como FALSE para todos los valores excepto -1 - que evalúa TRUE y ordena al último. Simplemente agregue sort como secundario ORDER BY elemento.

Alternativa equivalente:

SELECT *
FROM   tasks
ORDER  BY (sort IS DISTINCT FROM -1) DESC, sort;

db<>violín aquí
Sqlfiddle antiguo