我有一个“评级”表,其中包含(作为外键)所评级事物的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
,但这似乎没有帮助。
谢谢,对不起,如果不清楚的话。
答案 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