Maison >base de données >tutoriel mysql >Comment trier les valeurs non nulles par ordre croissant, puis les valeurs nulles, avec les valeurs -1 en dernier dans PostgreSQL ?

Comment trier les valeurs non nulles par ordre croissant, puis les valeurs nulles, avec les valeurs -1 en dernier dans PostgreSQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-03 08:07:38628parcourir

How to Sort Non-Null Values Ascending, then Nulls, with -1 Values Last in PostgreSQL?

Tri des valeurs nulles d'une manière spéciale après les valeurs non nulles

Contexte

Dans une table PostgreSQL avec un champ de tri facultatif, l'objectif est pour trier les valeurs comme suit :

  • Les valeurs non nulles doivent venir en premier, en les triant ordre croissant en fonction de leurs valeurs de tri.
  • Les valeurs NULL doivent apparaître après les valeurs non nulles.
  • Exceptionnellement, les valeurs de tri de -1 doivent apparaître après toutes les autres valeurs non nulles.

Solution

Pour obtenir ce comportement de tri, une approche consiste à utiliser le ORDER BY suivant clause :

ORDER BY (sort IS NOT DISTINCT FROM -1), sort

Explication

Cette clause fonctionne comme suit :

  • (sort IS NOT DISTINCT FROM -1) est évalué à FALSE pour toutes les valeurs sauf - 1, qui est évalué à VRAI.
  • L'expression est triée par ordre croissant, ce qui signifie des valeurs FAUX (non nulles les valeurs autres que -1) précèdent les valeurs VRAIES (-1).
  • La clause ORDER BY secondaire trie ensuite selon la valeur de tri, garantissant que les valeurs non nulles sont triées par ordre croissant au sein de leurs groupes respectifs.

Exemple

Considérez les exemples de données fournis :

id f_id name sort
1 1 zeta -1
2 1 alpha 1
3 1 gamma 3
4 1 beta 2
5 1 delta NULL
6 1 epsilon NULL

Utilisation du fournie, les éléments seraient triés comme suit :

alpha, beta, gamma, delta, epsilon, zeta

Formes alternatives

Une alternative équivalente à la clause initiale est :

ORDER BY (sort IS DISTINCT FROM -1) DESC, sort

Cette clause produit la même comportement de tri mais utilise le mot-clé DESC pour trier l'expression (sort IS DISTINCT FROM -1) par ordre décroissant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn