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
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
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 :
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.
Cela pourrait affecter les indices s'ils sont DESC ; peut-être pourriez-vous ajouter une note à ce sujet également ? postgresql.org/message-id/
@ChristopheRoussy : Les index correspondant à l'ordre de tri sont touchés dans la réponse liée ci-dessus.
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 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.