gpt4 book ai didi

mysql - 使用多个 LEFT JOIN 时,COUNT 和 SUM 会相乘

转载 作者:行者123 更新时间:2023-11-29 21:16:25 24 4
gpt4 key购买 nike

自从我完成任何 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 中的记录数 - 反之亦然。我假设这是我的加入或我的分组依据的问题...但似乎无法让它正确显示!

最佳答案

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

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

关于mysql - 使用多个 LEFT JOIN 时,COUNT 和 SUM 会相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35904442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com