提问者:小点点

左联接只返回一个记录


我想加入两桌。 一个是“用户”,另一个是“评论”。 我想要实现的是所有的用户与他们的平均和总评级从审查表。 当review表具有所有用户的评级时,我会得到所需的结果。 但是当reviews表为空时,我只从users表中获得一个记录。 当前,users表中有3个用户,但查询只显示一条记录。

我想要得到所有的用户,即使没有一个用户的记录在评论表。 下面是我正在使用的查询

SELECT u.id, u.name, u.photo, COUNT(r.rating) AS totalratings,
                                ( SELECT ROUND (AVG(r.rating),0)
                                FROM reviews r
                                WHERE r.fk_receiver_id = u.id) AS avg_rating 
                                FROM
                                users u LEFT JOIN reviews r
                                ON r.fk_receiver_id = u.id 
                                WHERE u.role=2
                                GROUP BY r.fk_receiver_id

共1个答案

匿名用户

您按错误的列分组; 当它为null时(这将是因为左联接),分组的行为将不像您所希望的那样。 您的查询应该类似于:

SELECT
  u.id,
  max(u.name) as name,
  max(u.photo) as photo,
  COUNT(r.rating) AS totalratings,
  ROUND(AVG(r.rating), 0) AS avg_rating
FROM users u
LEFT JOIN reviews r ON r.fk_receiver_id = u.id
WHERE u.role = 2
GROUP BY u.id

参见DB Fiddle中的运行示例。