gpt4 book ai didi

mysql - SQL - 如何连接两个表并根据它们之间的 ID 对列求和?

转载 作者:可可西里 更新时间:2023-11-01 07:50:59 25 4
gpt4 key购买 nike

我有两张 table 。一张表是主数据

表 tbl1:

+-------------+------------+------------+
| ID | Name | Total |
+-------------+------------+------------+
| 1 | a | 10 |
| 2 | b | 5 |
| 3 | c | 4 |
| 4 | a | 4 |
+-------------+------------+------------+

第二个表 tbl2 包含子数据。表之间的键是ID

表 tbl2:

+-------------+------------+
|id | qty |
+-------------+------------+
| 1 | 4 |
| 1 | 3 |
| 1 | 1 |
| 3 | 1 |
| 3 | 3 |
+-------------+------------+

我需要得到这样的输出:

输出:

+-------------+------------+------------+
| name | sum_tot | sum_qty |
+-------------+------------+------------+
| a | 14 | 8 |
| b | 5 | 0 |
| c | 4 | 4 |
+-------------+------------+------------+

我试过这个:

select tbl1.name, SUM(tbl1.total), SUM(tbl2.qty)
from tbl1
left join tbl2 ON tbl1.id = tbl2.id
GROUP by tbl1.name

我得到的输出是:

输出:

+-------------+------------+------------+
| name | sum_tot | sum_qty |
+-------------+------------+------------+
| a | 34 | 8 |
| b | 5 |null |
| c | 8 | 4 |
+-------------+------------+------------+

这是不正确的。

这是 sql fiddle :

enter image description here

第一个表的摘要与第二个表无关。似乎查询以某种方式运行了三次。

最佳答案

您可以简单地使用相关子查询来计算 tbl2 总和:

select tbl1.name, 
SUM(tbl1.total),
SUM(COALESCE((select SUM(tbl2.qty)
from tbl2
where tbl1.id = tbl2.id), 0)) as qty_tot
from tbl1
GROUP by tbl1.name

关于mysql - SQL - 如何连接两个表并根据它们之间的 ID 对列求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47332300/

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