Maison >base de données >tutoriel mysql >Pourquoi ne puis-je pas utiliser d'agrégats avec alias dans la clause HAVING de SQL ?

Pourquoi ne puis-je pas utiliser d'agrégats avec alias dans la clause HAVING de SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-31 17:32:10866parcourir

Why Can't I Use Aliased Aggregates in SQL's HAVING Clause?

Pourquoi les agrégats avec alias sont interdits dans les clauses HAVING

En SQL, les utilisateurs rencontrent souvent une erreur lorsqu'ils tentent d'utiliser un alias pour un agrégat dans une clause HAVING. Cela découle de l'ordre spécifique dans lequel SQL traite les requêtes.

La clause HAVING, qui filtre les résultats d'une opération GROUP BY, est évaluée avant la clause SELECT. Par conséquent, les alias définis dans la clause SELECT ne sont pas encore disponibles lors de l'évaluation de la clause HAVING.

Pour mieux comprendre cela, considérons la séquence logique suivante d'exécution de requête :

  1. Les résultats de toutes les tables jointes dans la clause FROM sont formés.
  2. La clause WHERE filtre les lignes qui ne correspondent pas à la recherche critères.
  3. Les lignes sont regroupées selon la clause GROUP BY.
  4. Les groupes qui ne répondent pas aux critères de la clause HAVING sont éliminés.
  5. Des fonctions d'agrégation sont appliquées pour calculer les valeurs agrégées. .
  6. Les expressions dans la clause SELECT sont évaluées.

Depuis la clause HAVING est évalué avant la clause SELECT, il ne peut pas faire référence aux alias définis ultérieurement dans la requête. Cette restriction explique pourquoi l'utilisation d'un alias dans une clause HAVING, comme le montre l'exemple, entraîne une erreur "Nom de colonne invalide".

En revanche, les alias fonctionnent dans la clause ORDER BY car la clause ORDER BY est évalué après la clause SELECT. Par conséquent, les alias définis dans la clause SELECT peuvent être utilisés dans la clause ORDER BY.

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