Maison >base de données >tutoriel mysql >Comment trier par alias dans PostgreSQL et éviter l'erreur « Colonne inexistante » ?

Comment trier par alias dans PostgreSQL et éviter l'erreur « Colonne inexistante » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 18:09:15836parcourir

How to Order By an Alias in PostgreSQL and Avoid the

Comment commander par un alias dans PostgreSQL : résoudre l'erreur « Colonne inexistante »

Dans PostgreSQL, lorsque vous travaillez avec des alias, vous peut rencontrer une erreur lors de la commande des résultats. Par exemple, considérons la requête suivante :

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    global_stock = 0,
    title;

L'exécution de cette requête dans PostgreSQL 8.1.23 produira probablement l'erreur : Échec de la requête : ERREUR : la colonne "global_stock" n'existe pas. Cette erreur se produit car l'alias "global_stock" n'est pas reconnu comme une colonne existante dans la table "product".

Pour résoudre ce problème, vous disposez de quelques options :

Option 1 : Ordre par position

PostgreSQL permet de trier par position de la colonne au lieu de son nom. Par exemple, vous pouvez écrire :

select 
    title, 
    ( stock_one + stock_two ) as global_stock
from product
order by 2, 1

Cette requête classe les résultats d'abord par la deuxième colonne (qui est "global_stock"), puis par la première colonne (qui est "titre").

Option 2 : Encapsuler dans une sous-requête

Une autre méthode consiste à envelopper votre requête d'origine dans une sous-requête et à utiliser l'instruction CASE pour gérer la commande :

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

Cette requête crée d'abord une sous-requête qui calcule la valeur "global_stock". La sous-requête est ensuite enveloppée dans une autre instruction SELECT qui utilise l'instruction CASE pour classer les résultats en fonction de la disponibilité des éléments (0 pour disponible, 1 pour indisponible).

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