如何计算两张关联表中共同ID对应的所有sum值总和
问题描述
现有两张关联表table1与table2,需对同时存在于两张表中的ID对应的sum字段值进行求和。表结构及数据如下:
table1:
| id | sum |
|---|---|
| 1 | 5 |
| 3 | 10 |
| 5 | 15 |
table2:
| id | sum |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 5 | 30 |
预期计算结果为:
sum = 5 + 10 + 15 + 30 = 60
解决方案
方法一:合并数据后求和
通过子查询分别提取两张表中共有ID对应的sum值,合并后整体求和:
SELECT SUM(total) AS total_sum FROM ( -- 取出table1中存在于table2的ID对应的sum SELECT sum AS total FROM table1 WHERE id IN (SELECT id FROM table2) UNION ALL -- 取出table2中存在于table1的ID对应的sum SELECT sum AS total FROM table2 WHERE id IN (SELECT id FROM table1) ) AS combined_data;
方法二:关联表后分别求和再相加
利用INNER JOIN仅保留两张表共有的ID,分别统计两张表的sum总和后相加:
SELECT (SUM(t1.sum) + SUM(t2.sum)) AS total_sum FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.id;
两种方法最终都会得到结果60,符合预期需求。
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

