与AVG()连接的MySQL表
我有一个评级表,它包含作为外键的它正在评级的东西的ID。一件事情可能有多个评级,或者一个价值没有评级 我想加入表以查看所有不同ID的不同分级,但现在我无法查看没有分级的内容。例如:与AVG()连接的MySQL表,mysql,Mysql,我有一个评级表,它包含作为外键的它正在评级的东西的ID。一件事情可能有多个评级,或者一个价值没有评级 我想加入表以查看所有不同ID的不同分级,但现在我无法查看没有分级的内容。例如: mysql> select avg(ratings.rating), thing.id from ratings, things where ratings.thingId = thing.id group by thing.id; +----------------------+----+ | avg(ra
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 |
+----------------------+----+
有没有办法修改我的select查询,使其也包含没有评级的ID?我试图修改语句,说明ratings.thingId=thing.id或thing.id>0的位置,但这似乎没有帮助
如果不清楚,请表示感谢和抱歉。您当前正在执行内部联接,这将消除没有关联评级的记录。相反,一个外部连接
SELECT AVG(ratings.rating),
thing.id
FROM things
LEFT OUTER JOIN ratings
ON ratings.thingId = things.id
GROUP BY thing.id
SELECT AVG(COALESCE(ratings.rating, 0)), thing.id
FROM things
LEFT JOIN ratings ON things.id = ratings.thingId
GROUP BY thing.id
将返回所有内容,无论它们是否具有评级。注意COALESCE的使用,它将返回第一个非空参数-因此没有评级的事物将返回0作为其平均值。选择p.id,p.title,选择roundavgpr.rating,1 从后评级公关
where pr.postid=p.idas AVG FROM posts p感谢您的解释-在我的书中还没有走那么远,我真的很想知道如何解决这个问题!