Maison > base de données > tutoriel mysql > Comment trier les données PostgreSQL avec des valeurs nulles et une valeur de cas spécial (-1) ?

Comment trier les données PostgreSQL avec des valeurs nulles et une valeur de cas spécial (-1) ?

Barbara Streisand
Libérer: 2024-12-29 18:16:10
original
580 Les gens l'ont consulté

How to Sort PostgreSQL Data with Nulls and a Special Case (-1) Value?

Tri des valeurs avec des cas particuliers dans PostgreSQL

Cette discussion est centrée sur l'organisation des données d'une table PostgreSQL nommée « tâches ». Chaque tâche comporte un champ facultatif appelé « tri ». L'objectif est de donner la priorité aux tâches de tri sans valeurs de « tri » après toutes les autres, à l'exception de celles avec « -1 » comme valeur de tri, qui doivent apparaître après toutes les autres.

Considérez les exemples de données suivants :

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

L'utilisation de COALESCE(sort,99999) seule regroupera les valeurs nulles après les valeurs non nulles, mais cela ne traitera pas le cas particulier de "-1."

La solution utilise le type de données booléen de PostgreSQL pour obtenir l'ordre de tri souhaité :

SELECT *
FROM tasks
ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
Copier après la connexion

Cette requête profite du fait que la comparaison "(le tri N'EST PAS DISTINCT FROM -1)" est évalué à FALSE pour toutes les valeurs sauf "-1", qui lui-même est évalué à TRUE. En triant d'abord par cette expression, les valeurs "-1" sont placées à la fin de la commande, quelles que soient leurs valeurs de tri.

Une approche alternative, utilisant le mot-clé DESC, est également présentée :

SELECT *
FROM tasks
ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
Copier après la connexion

Les deux méthodes trient efficacement les tâches sans valeurs de « tri » après toutes les autres, tout en garantissant que les valeurs « -1 » apparaissent après toutes les autres valeurs de tri non nulles.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal