如何对行数不同的两张表列求和?SQL求和结果异常求助
问题分析与解决
你的查询结果不符合预期,核心原因是LEFT JOIN导致Table1的行被重复匹配:
- Table1中NO=1的行仅1条(VALUE1=1000),但Table2中NO=1的行有2条,连接后会生成2条数据:
(1000,10)和(1000,20) - 此时
SUM(VALUE1+VALUE2)实际计算的是(1000+10)+(1000+20)=2030,而非你期望的1000+(10+20)=1030
正确解法
方法1:先聚合Table2,再关联Table1
先对Table2按NO分组求和VALUE2,再和Table1连接,避免VALUE1被重复计算:
SELECT t1.VALUE1 + COALESCE(t2.sum_value2, 0) AS TOTAL FROM TABLE1 t1 LEFT JOIN ( -- 先计算Table2每个NO对应的VALUE2总和 SELECT NO, SUM(VALUE2) AS sum_value2 FROM TABLE2 GROUP BY NO ) t2 ON t2.NO = t1.NO
使用COALESCE是为了处理Table1存在但Table2无对应NO的情况,避免结果出现NULL。
方法2:分别求和后直接相加
如果不需要按NO分组(当前场景仅NO=1),可以直接对两张表分别求和再相加:
SELECT (SELECT SUM(VALUE1) FROM TABLE1) + (SELECT SUM(VALUE2) FROM TABLE2) AS TOTAL
内容的提问来源于stack exchange,提问作者Farrasta Khoirunnas Saum
相关产品推荐
相关产品推荐

