SUM与MYSQL查询中的LEFT JOIN和GROUP BY混合

问题描述 投票:0回答:1

我在涉及求和,左联接和分组依据的查询中遇到了一些麻烦

$sql = "
SELECT h.id AS hid
     , SUM(l.likes) AS likes 
  FROM homes h
  LEFT 
  JOIN likes l
    ON l.homeid = h.id
 GROUP 
    BY h.id
";

[而不是对每个房屋的喜欢进行求和,如果房屋没有喜欢,则给出NULL,如果房屋没有喜欢,则给出8873。我真的听不懂8873。

注意,此表中有很多喜欢其他项的情况,在这种情况下,l.homeid的值为NULL。那会丢东西吗?

编辑:

[我为另一个用户添加了一个类似的Homeid,现在它给我1赞的人给了8906而不是8873,给我两个赞的人给了17812。这很奇怪。所有数字的数据类型为int(11)。我将创建一个全新的表,看看该表是否执行相同的操作。我还将删除最近添加的唯一索引。

mysql group-by sum left-join
1个回答
0
投票

[尝试将聚合移动到派生表中,然后进行联接,然后联接:

SELECT
    h.id                   AS hid
  , COALESCE( l.likes, 0 ) AS likes
FROM homes h
LEFT JOIN (
        SELECT
            homeid
          , SUM( likes ) AS likes
        FROM likes
        GROUP BY
            homeid
    ) AS l ON h.id = l.homeid
© www.soinside.com 2019 - 2024. All rights reserved.