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

如何在Union ALL的SQL结果中添加总计行,合并55090.25与1522.8?

给UNION ALL结果添加总计行的几种方法

嘿,我来帮你搞定这个需求!针对你的情况,要给UNION ALL得到的两个数值添加总计行,有几种实用的方法,我一个个给你拆解:

方法1:用CTE(公共表表达式)先存结果,再追加求和行

这是最清晰、通用的方法,不管你的UNION ALL里有多少个查询都适用。先把UNION ALL的结果临时存起来,再对这个临时数据集求和,最后用UNION ALL把求和结果追加到后面:

WITH union_results AS (
    -- 这里替换成你实际的UNION ALL查询
    SELECT 55090.25 AS value
    UNION ALL
    SELECT 1522.8 AS value
)
-- 先输出原始的两个结果行
SELECT value FROM union_results
UNION ALL
-- 再输出总计行
SELECT SUM(value) AS value FROM union_results;

执行后你会得到三行结果:

  • 55090.25
  • 1522.8
  • 56613.05(两个数的总和)

方法2:如果原查询是分组统计,用ROLLUP自动生成总计

如果你的两个结果是从分组查询里得到的(比如按类别分组求和),可以用GROUP BY ... WITH ROLLUP来直接生成总计行,不用额外写UNION ALL,效率更高:

假设你的原查询是这样的:

SELECT category, SUM(amount) AS value
FROM your_table
WHERE category IN ('类型1', '类型2')
GROUP BY category;

改成带ROLLUP的版本:

SELECT 
    -- 当GROUPING(category)=1时,说明是总计行,显示“总计”,否则显示类别名
    CASE WHEN GROUPING(category) = 1 THEN '总计' ELSE category END AS category,
    SUM(amount) AS value
FROM your_table
WHERE category IN ('类型1', '类型2')
GROUP BY category WITH ROLLUP;

这样结果里会自动多出一行category='总计'的行,值就是两个分组的总和。

UNION ALL结果求和/总计的通用思路

总结一下,实现UNION ALL结果的求和或总计,核心思路有三种:

  • 临时存储法:用CTE或者临时表把UNION ALL的结果存起来,只执行一次原始查询,再基于这个临时数据集做求和(推荐,清晰又高效)
  • 分组扩展法:如果原查询是分组统计,利用数据库的ROLLUP/CUBE语法自动生成总计行,这是最优雅的方式
  • 重复计算法:把UNION ALL的结果作为子查询,分别查询原始行和求和行(不推荐,会重复执行两次UNION ALL,效率较低)

需要注意的是,要确保求和后的数值类型和原始结果一致,比如原始是DECIMAL(10,2),求和后也要保持相同精度,避免小数位数丢失。

内容的提问来源于stack exchange,提问作者user9399808

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:12:01