Maison >base de données >tutoriel mysql >Comment trier les données PostgreSQL avec des valeurs NULL en dernier, à l'exception d'une valeur spécifique ?

Comment trier les données PostgreSQL avec des valeurs NULL en dernier, à l'exception d'une valeur spécifique ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-04 05:33:42415parcourir

How to Order PostgreSQL Data with NULLs Last, Except for a Specific Value?

Commander les valeurs NULL après toutes les autres, sauf les valeurs spéciales

Lors du tri des données dans une table PostgreSQL contenant des champs de tri facultatifs, un défi courant gère les valeurs nulles. Il est souhaitable de placer les tâches avec des valeurs de tri nulles après toutes les autres, mais d'accorder la priorité aux tâches avec une valeur de tri spéciale, telle que -1.

Ceci peut être réalisé en utilisant la fonction COALESCE en conjonction avec des opérateurs booléens. , en particulier l'opérateur (IS NOT DISTINCT FROM). La requête suivante illustre cette approche :

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

Comment ça marche :

L'expression (sort IS NOT DISTINCT FROM -1) est évaluée à FALSE pour toutes les valeurs sauf -1, qui est évalué à VRAI. Dans l'ordre de tri par défaut de PostgreSQL, les valeurs NULL sont placées en dernier, tandis que TRUE est classé plus haut que FALSE.

En incorporant cette expression dans la clause ORDER BY, les tâches avec des valeurs de tri de -1 sont positionnées après les tâches avec des valeurs non- valeurs de tri nulles, tandis que les tâches avec des valeurs de tri nulles sont placées après toutes les autres tâches.

Supplémentaire Remarque :

Une requête équivalente alternative peut être écrite à l'aide du mot-clé DESC :

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

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