【问题标题】:COUNT and SUM are multiplying when using multiple LEFT JOINs使用多个 LEFT JOIN 时,COUNT 和 SUM 相乘
【发布时间】:2016-03-09 23:04:03
【问题描述】:

自从我做任何 MySQL 以来已经有一段时间了,所以我可能只是在这里忘记了一些基本的东西 - 但这是我的情况:

(我的表格的简化版)

表 A(2 行)

d_id

d_nm

d_active

表 B(10 行匹配 d_id #1,0 行匹配 d_id #2)

t_id

t_nm

d_id

t_active

表 C(11 行匹配 d_nm #1(共 496 行),0 行匹配 d_nm #2)

c_id

c_nm

d_nm

尺寸1

大小2

查询:

SELECT 
    a.d_id,
    a.d_nm,
    COUNT(b.t_id) AS tcount,
    SUM(c.size1+c.size2) AS size 
FROM TableA a 
LEFT JOIN TableB b 
ON (b.d_id=a.d_id AND b.t_active=1)
LEFT JOIN TableC c 
ON (c.d_nm=a.d_nm)
WHERE a.d_active=1 
GROUP BY a.d_id,a.d_nm 
ORDER BY a.d_nm

预期:

d_id --- d_nm --- tcount --- 大小

1 ------- d1 ------- 10 -------- 496

2 ------- d2 ------- 0 ---------- 0

实际结果:

d_id --- d_nm --- tcount --- 大小

1 ------- d1 ------- 110 ------- 5,456

2 ------- d2 ------- 0 ---------- 0

由于某种原因,它会将tcount 的结果乘以size 中的记录数 - 反之亦然。我假设这是我的 Join 或 Group By 的问题......但似乎无法让它正确出现!

【问题讨论】:

    标签: mysql join count group-by sum


    【解决方案1】:

    想出了这个,它有效。我没有对整个表进行常规的左连接,而是只左连接到表中的查询结果。由于目前我的数据量很小,因此运行这两个查询的时间是相当的。不确定随着表大小的增长是否会影响性能?如果有人知道更好的方法,请告诉我!

    SELECT a.d_id,a.d_nm,b.tcount,c.size FROM TableA a
    LEFT JOIN(SELECT d_id,COUNT(t_id)AS tcount FROM TableB WHERE t_active=1 GROUP BY d_id)b ON(b.d_id=a.d_id)
    LEFT JOIN(SELECT d_nm,SUM(size1+size2)AS size FROM TableC GROUP BY d_nm)c ON(c.d_nm=a.d_nm)
    WHERE a.d_active=1 ORDER BY a.d_nm
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 2020-05-17
      • 2021-10-21
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多