如何用SQL计算Table1每行对应Table2的数值总和?
SQL实现每行总和计算的方案
这里提供两种可行的SQL写法来实现你的需求:
方法一:多次左关联表获取数值后相加
这种方式逻辑直观,适合ID列数量固定且不多的场景:
SELECT t1.ID1, t1.ID2, t1.ID3, t1.ID4, COALESCE(t2a.Sum, 0) + COALESCE(t2b.Sum, 0) + COALESCE(t2c.Sum, 0) + COALESCE(t2d.Sum, 0) AS Sum FROM Table1 t1 LEFT JOIN Table2 t2a ON t1.ID1 = t2a.ID LEFT JOIN Table2 t2b ON t1.ID2 = t2b.ID LEFT JOIN Table2 t2c ON t1.ID3 = t2c.ID LEFT JOIN Table2 t2d ON t1.ID4 = t2d.ID;
- 使用
LEFT JOIN保证即便Table1里的ID在Table2中找不到匹配,也不会丢失整行数据 COALESCE函数用来处理无匹配的情况,把NULL转为0,避免求和时出现NULL结果
方法二:子查询批量匹配求和
如果后续ID列数量可能变化,这种写法更灵活:
SELECT t1.ID1, t1.ID2, t1.ID3, t1.ID4, ( SELECT SUM(t2.Sum) FROM Table2 t2 WHERE t2.ID IN (t1.ID1, t1.ID2, t1.ID3, t1.ID4) ) AS Sum FROM Table1 t1;
- 子查询通过
IN条件一次性匹配当前行的所有ID,直接计算总和 - 若存在ID无匹配的情况,
SUM会自动忽略这些NULL值,效果等同于将其视为0参与计算
内容的提问来源于stack exchange,提问作者storm97
相关产品推荐
相关产品推荐

