一尘不染

可以在mysql的WHERE子句中使用别名吗?

mysql

我需要在WHERE子句中使用别名,但它一直告诉我它的未知列。有什么办法可以解决这个问题?我需要选择评级高于x的记录。评分的计算方法如下:

sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating

阅读 471

收藏
2020-05-17

共1个答案

一尘不染

您可以使用HAVING子句,该子句 可以 看到别名,例如

 HAVING avg_rating>5

但是在where子句中,您需要重复您的表达式,例如

 WHERE (sum(reviews.rev_rating)/count(reviews.rev_id))>5

但!并非所有的表达式都被允许-使用像SUM这样的聚合函数将不起作用,在这种情况下,您将需要使用HAVING子句。

MySQL手册

不允许在WHERE子句中引用列别名,因为执行WHERE子句时可能尚未确定列值。请参见第B.1.5.4节“列别名问题”

2020-05-17