MySQL表加入AVG()

时间:2011-02-08 20:00:40

标签: mysql

我有一个“评级”表,其中包含(作为外键)所评级事物的ID。事物可能有多个评级,或者没有值的评级。

我想加入表格以查看所有不同ID的不同评级,但是现在我无法查看没有评级的内容。例如:

mysql> select avg(ratings.rating), thing.id from ratings, things where ratings.thingId = thing.id group by thing.id;
+----------------------+----+
|  avg(ratings.rating) | id |
+----------------------+----+
|               6.3333 |  1 |
|               6.0000 |  2 |
+----------------------+----+

有没有办法修改我的选择查询以包含没有评级的ID?我试着修改声明说where ratings.thingId = thing.id or thing.id > 0,但这似乎没有帮助。

谢谢,对不起,如果不清楚的话。

3 个答案:

答案 0 :(得分:8)

SELECT  AVG(ratings.rating),
        thing.id
    FROM things
        LEFT OUTER JOIN ratings
            ON ratings.thingId = things.id
    GROUP BY thing.id

答案 1 :(得分:4)

您当前正在执行INNER JOIN,这会删除没有关联things的{​​{1}}条记录。相反,OUTER JOIN ......

ratings

将返回所有SELECT AVG(COALESCE(ratings.rating, 0)), thing.id FROM things LEFT JOIN ratings ON things.id = ratings.thingId GROUP BY thing.id ,无论他们是否things。注意使用ratings,它将返回第一个非NULL参数 - 因此COALESCE()没有things将返回0作为它们的平均值。

答案 2 :(得分:-1)

SELECT p.id,p.title,(选择回合(平均(pr.rating),1) 来自post_rating pr 其中pr.postid = p.id)为AVG FROM posts p