左连接只返回一条记录
Left Join Returning Only One Record
我想加入两个 table。一个是 'users',另一个是 'reviews'。
我想要实现的是所有用户的平均评分和总评分 table。
当评论 table 获得所有用户的评分时,我得到了想要的结果。
但是当评论 table 为空时,我只从用户 table 那里得到一条记录。当前用户 table 中有 3 个用户,但查询仅显示一条记录。
即使评论中没有用户记录,我也想获得所有用户table。
这是我正在使用的查询
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 中的 运行 示例。
我想加入两个 table。一个是 'users',另一个是 'reviews'。 我想要实现的是所有用户的平均评分和总评分 table。 当评论 table 获得所有用户的评分时,我得到了想要的结果。 但是当评论 table 为空时,我只从用户 table 那里得到一条记录。当前用户 table 中有 3 个用户,但查询仅显示一条记录。
即使评论中没有用户记录,我也想获得所有用户table。 这是我正在使用的查询
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 中的 运行 示例。