You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:04:03