Cette question est assez ancienne et une réponse a déjà recueilli 160 voix ...
Je voudrais néanmoins préciser ceci: la question n'est pas en fait de savoir si les noms d'alias peuvent être utilisés dans la WHEREclause.
sum(reviews.rev_rating) / count(reviews.rev_id) as avg_rating
est une agrégation. Dans la WHEREclause, nous restreignons les enregistrements que nous voulons des tables en examinant leurs valeurs. sum(reviews.rev_rating)et count(reviews.rev_id), cependant, ne sont pas des valeurs que nous trouvons dans un enregistrement; ce sont des valeurs que nous n'obtenons qu'après agrégation des enregistrements.
C'est donc WHEREinapproprié. Nous avons besoin HAVING, car nous voulons restreindre les lignes de résultats après agrégation. Ça ne peut pas être
WHERE avg_rating > 10
ni
WHERE sum(reviews.rev_rating) / count(reviews.rev_id) > 10
Par conséquent.
HAVING sum(reviews.rev_rating) / count(reviews.rev_id) > 10
d'autre part est possible et conforme à la norme SQL. Tandis que
HAVING avg_rating > 10
n'est possible que dans MySQL. Ce n'est pas du SQL valide selon la norme, car la SELECTclause est censée être exécutée après HAVING. À partir de la documentation MySQL:
Une autre extension MySQL du SQL standard autorise les références dans la clause HAVING à des expressions aliasées dans la liste de sélection.
L'extension MySQL permet l'utilisation d'un alias dans la clause HAVING pour la colonne agrégée
https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html