mysql如何查询ROUND(AVG(`row`))等于的位置

时间:2014-06-02 05:20:23

标签: mysql sql aggregate-functions

我有一个查询,它会选择一堆“项目”以及客户为该项目给出的平均评分。它看起来像这样:

SELECT `items`.`itemid`,
       `items`.`name`,
       `items`.`address`,
       `items`.`suburb`,
       `items`.`latitude`,
       `items`.`longitude`,
       `reviews`.`comment`,
       Round(Avg(`reviews`.`rating`), 0) AS avg
FROM   `items`
       RIGHT JOIN `reviews`
               ON `items`.`itemid` = `reviews`.`itemid`
GROUP  BY `items`.`itemid`; 

现在,这有效,我可以获得有关某个项目及其平均评分的所有信息。

我想要的是添加

WHERE avg ='3';

其中3是选定值,因此我可以搜索“平均评分为3的所有项目”等。

其中avg ='3'不起作用。我只是想知道是否有办法做到这一点?甚至使用PHP。

1 个答案:

答案 0 :(得分:1)

使用having子句过滤聚合函数的结果

SELECT `items`.`itemid`,
       `items`.`name`,
       `items`.`address`,
       `items`.`suburb`,
       `items`.`latitude`,
       `items`.`longitude`,
       `reviews`.`comment`,
       Round(Avg(`reviews`.`rating`), 0) AS avg
FROM   `items`
       RIGHT JOIN `reviews` using (`itemid`)
GROUP  BY `reviews`.`itemid`
HAVING Round(Avg(`reviews`.`rating`), 0) = 3

使用SQL Fiddle

进行演示