【问题标题】:Left Join Returning Only One Record左连接只返回一条记录
【发布时间】:2020-07-05 11:49:11
【问题描述】:

我想加入两个表。一个是“用户”,另一个是“评论”。 我想要实现的是所有用户的平均评分和总评分来自评论表。 当评论表包含所有用户的评分时,我得到了预期的结果。 但是当评论表为空时,我只能从用户表中获得一条记录。目前 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

【问题讨论】:

    标签: php mysql count left-join average


    【解决方案1】:

    您按错误的列分组;当它为空时(这将是因为左连接),分组将不会按你想要的方式运行。您的查询应如下所示:

    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 的运行示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2023-03-27
      • 2016-05-22
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多