130 votes

Trier les valeurs NULL à la fin d'une table

Existe-t-il un moyen avec PostgreSQL de trier les rangées avec NULL les valeurs des champs jusqu'à la fin du tableau sélectionné ?

Comme :

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

249voto

Erwin Brandstetter Points 110228

NULL valeurs sont trié en dernier par défaut ascendant ordre. Vous n'avez rien à faire de plus.

La question s'applique à descendant l'ordre, qui est l'inverse parfait et permet donc de trier NULL sur le dessus.
PostgreSQL 8.3 introduit NULLS LAST :

ORDER BY somevalue DESC NULLS LAST

Pour PostgreSQL 8.2 et plus ou autre SGBDR sans cette norme SQL fonction :

ORDER BY (somevalue IS NULL), somevalue DESC

FALSE sortes avant TRUE donc NULL viennent en dernier, comme dans l'exemple ci-dessus.

Voir :

3 votes

IMHO dans la plupart des applications du monde réel, vous voudriez que les valeurs nulles soient les dernières, quel que soit l'ordre. Par exemple, trier DESC sur un horodatage optionnel, prénom, nom, ... donc je trouve cela vraiment suspect même si cela semble logique que mathématiquement l'ordre DESC soit l'opposé de ASC. Peut-être que les nulls sont juste à mettre dans une catégorie à part et ne devraient pas être affectés par ASC, DESC et toujours mettre en dernier, cela aurait été un meilleur défaut.

0 votes

Cela pourrait affecter les indices s'ils sont DESC ; peut-être pourriez-vous ajouter une note à ce sujet également ? postgresql.org/message-id/

0 votes

@ChristopheRoussy : Les index correspondant à l'ordre de tri sont touchés dans la réponse liée ci-dessus.

66voto

Mosty Mostacho Points 22803

Est-ce que ça fait l'affaire ?

ORDER BY somevalue DESC NULLS LAST

Tiré de : http://www.postgresql.org/docs/9.0/static/sql-select.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X