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."
Considérez l'exemple suivant :
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 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.
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;
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;
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!