Can you use an alias in the WHERE clause in mysql?

前端 未结 5 1158
予麋鹿
予麋鹿 2020-11-22 04:11

I need to use an alias in the WHERE clause, but It keeps telling me that its an unknown column. Is there any way to get around this issue? I need to select records that have

5条回答
  •  情深已故
    2020-11-22 04:23

    This question is quite old and one answer already gained 160 votes...

    Still I would make this clear: The question is actually not about whether alias names can be used in the WHERE clause.

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

    is an aggregation. In the WHERE clause we restrict records we want from the tables by looking at their values. sum(reviews.rev_rating) and count(reviews.rev_id), however, are not values we find in a record; they are values we only get after aggregating the records.

    So WHERE is inappropriate. We need HAVING, as we want to restrict result rows after aggregation. It can't be

    WHERE avg_rating > 10
    

    nor

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

    hence.

    HAVING sum(reviews.rev_rating) / count(reviews.rev_id) > 10
    

    on the other hand is possible and complies with the SQL standard. Whereas

    HAVING avg_rating > 10
    

    is only possible in MySQL. It is not valid SQL according to the standard, as the SELECT clause is supposed to get executed after HAVING. From the MySQL docs:

    Another MySQL extension to standard SQL permits references in the HAVING clause to aliased expressions in the select list.

    The MySQL extension permits the use of an alias in the HAVING clause for the aggregated column

    https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

提交回复
热议问题