Maison >base de données >tutoriel mysql >Comment trier par alias dans PostgreSQL et éviter l'erreur « Colonne inexistante » ?
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!