Maison > base de données > tutoriel mysql > Comment puis-je utiliser un alias dans une clause ORDER BY de PostgreSQL sans obtenir une erreur « la colonne n'existe pas » ?

Comment puis-je utiliser un alias dans une clause ORDER BY de PostgreSQL sans obtenir une erreur « la colonne n'existe pas » ?

DDD
Libérer: 2024-12-29 12:18:10
original
142 Les gens l'ont consulté

How Can I Use an Alias in a PostgreSQL ORDER BY Clause Without Getting a

Utilisation d'un ALIAS dans la clause ORDER BY de PostgreSQL

Lorsqu'ils tentent d'utiliser un alias dans la clause ORDER BY d'une requête PostgreSQL, certains utilisateurs rencontrent l'erreur "colonne n'existe pas."

Explication du problème

Considérez l'exemple suivant :

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    global_stock = 0,
    title;
Copier après la connexion

L'exécution de cette requête dans PostgreSQL 8.1.23 génère l'erreur : "la colonne 'global_stock' n'existe pas." Cette erreur se produit car les alias ne sont pas reconnus dans la clause ORDER BY.

Solution

Il existe deux solutions possibles :

1. Ordre numérique :

Au lieu d'utiliser l'alias, vous pouvez référencer la colonne par sa position dans la clause SELECT. Dans l'exemple ci-dessus, l'alias 'global_stock' correspond à la colonne 2. La requête modifiée serait donc :

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    2, 1;
Copier après la connexion

2. Sous-requête avec expression CASE :

Une autre option consiste à utiliser une sous-requête et une expression CASE :

SELECT *
FROM
(
    SELECT 
        title, 
        (stock_one + stock_two) AS global_stock
    FROM
        product
) x
ORDER BY
    (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
Copier après la connexion

Dans ce cas, l'expression CASE attribue une valeur de 1 aux lignes avec 'global_stock' = 0 et 0 pour tous les autres. La requête trie ensuite les résultats par ordre décroissant en fonction de cette valeur, hiérarchisant ainsi les éléments disponibles.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal