与AVG()连接的MySQL表

与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

我有一个评级表,它包含作为外键的它正在评级的东西的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 |
+----------------------+----+
有没有办法修改我的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

感谢您的解释-在我的书中还没有走那么远,我真的很想知道如何解决这个问题!