我想加入两桌。 一个是“用户”,另一个是“评论”。 我想要实现的是所有的用户与他们的平均和总评级从审查表。 当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
您按错误的列分组; 当它为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中的运行示例。