Dans PostgreSQL, l'utilisation d'alias dans une clause ORDER BY peut être délicate. Considérez la requête suivante :
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY global_stock = 0, title;
Lors de l'exécution de cette requête dans PostgreSQL 8.1.23, une erreur est rencontrée : "ERREUR : la colonne "global_stock" n'existe pas". Pour résoudre ce problème, il existe deux approches principales :
La première approche consiste à trier par numéro de colonne au lieu de l'alias. Dans ce cas, la requête ressemblerait à ceci :
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY 2, 1;
Ici, "2" fait référence à la deuxième colonne, qui est l'alias "global_stock".
Une approche alternative consiste à envelopper la requête d'origine dans une sous-requête, puis à la trier par alias dans la sous-requête. La requête deviendrait :
SELECT * FROM ( SELECT title, (stock_one + stock_two) AS global_stock FROM product ) AS x ORDER BY (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
Dans ce cas, l'alias "global_stock" est utilisé dans la sous-requête et la clause ORDER BY est appliquée à l'ensemble de résultats de la sous-requête.
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!