Pourquoi ne puis-je pas utiliser un alias d'agrégation dans une clause HAVING ?
Considérez l'instruction SQL suivante :
select col1,count(col2) as col7 from --some join operation group by col1 having col7 >= 3 -- replace col7 by count(col2) to make the code work
Ce code génère une erreur indiquant que "col7" est un nom de colonne invalide. Pourquoi en est-il ainsi ?
La raison réside dans l'ordre d'exécution des instructions SQL. La clause HAVING est évaluée avant la clause SELECT. Cela signifie que lorsque la clause HAVING est évaluée, l'alias "col7" pour la fonction d'agrégation count(col2) n'est pas encore défini.
SQL exécute les requêtes dans l'ordre suivant :
Par conséquent, dans le code donné, la clause HAVING tente d'utiliser l'alias "col7" avant qu'il ne soit défini dans la clause SELECT. Pour résoudre le problème, vous pouvez remplacer "col7" par la fonction d'agrégation elle-même :
select col1,count(col2) from --some join operation group by col1 having count(col2) >= 3
Cela permet à la clause HAVING d'évaluer correctement le nombre agrégé de col2.
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!