MySQL中如何对UNION查询的多个字段进行求和?
解决MySQL中UNION后多字段求和的问题
嘿,这个场景我太熟悉了!其实核心思路就是先合并两个查询的结果,再按共同的维度分组求和,具体实现起来很直接,我给你一步步拆解:
关键注意点先提一句
一定要用UNION ALL而不是UNION!因为UNION会自动去重,如果你两个查询里有相同的FieldOne/FieldTwo/FieldThree组合,UNION会把其中一行删掉,而我们需要的是把它们的计数加起来,所以必须用UNION ALL保留所有行。
完整SQL示例
假设你的两个查询分别是QueryOne和QueryTwo,直接套下面的结构就行:
SELECT FieldOne, FieldTwo, FieldThree, SUM(CountOne) AS TotalCountOne, -- 对CountOne求和 SUM(CountTwo) AS TotalCountTwo, -- 对CountTwo求和 SUM(CountThree) AS TotalCountThree -- 对CountThree求和 FROM ( -- 第一个查询的结果 SELECT FieldOne, FieldTwo, FieldThree, CountOne, CountTwo, CountThree FROM QueryOne UNION ALL -- 第二个查询的结果(结构和第一个完全一致) SELECT FieldOne, FieldTwo, FieldThree, CountOne, CountTwo, CountThree FROM QueryTwo ) AS CombinedData -- 给合并后的子查询起个别名 GROUP BY FieldOne, FieldTwo, FieldThree; -- 按三个维度分组,保证相同组合的计数被累加
举个实际效果的例子
比如:
- QueryOne里有一行:
data1 | data11 | data111 | 3 | 0 | 0 - QueryTwo里有一行:
data1 | data11 | data111 | 2 | 1 | 0
合并后分组求和的结果就是:data1 | data11 | data111 | 5 | 1 | 0,完全符合你的需求。
额外小提示
如果你的原始查询本身就是带聚合的(比如用COUNT()得到的CountOne),直接把整个查询放到子查询里就行,不用改内部逻辑,只需要外层套分组求和就好。
内容的提问来源于stack exchange,提问作者Pangu
相关产品推荐
相关产品推荐

