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

如何使用UNION操作实现SUM汇总?SQL语句修改需求

问题

我尝试用UNION操作执行SUM汇总时出现错误。当前使用WITH子句创建临时表x(语句为with x as(select * from ..)),x的输出数据如下:

YEAR_WISE    OFFICE_NAME                 CATEGORY   KWT_COUNT   NON_KWT_COUNT
 2,019    HeadQuarters-MultiSpeciality   Doctor        18          40
 2,019    HeadQuarters-MultiSpeciality   Nurse          7          16

当前执行的SQL语句:

SELECT x.YEAR_WISE,x.OFFICE_NAME,x.CATEGORY,x.KWT_COUNT,x.NON_KWT_COUNT FROM x
UNION ALL
SELECT ''AS YEAR_WISE,'' AS OFFICE_NAME,'SUM',sum(x.KWT_COUNT),sum(x.NON_KWT_COUNT)FROM x;

期望输出是在数据行下方添加总计行:

YEAR_WISE    OFFICE_NAME                 CATEGORY   KWT_COUNT   NON_KWT_COUNT
 2,019    HeadQuarters-MultiSpeciality   Doctor        18          40
 2,019    HeadQuarters-MultiSpeciality   Nurse          7          16
                                         SUM           25          56

要求不使用子查询,如何实现该输出?需要对语句做哪些修改?

解决方案

按以下两点修改即可实现需求:

修改点说明

  1. 替换空字符串为NULL:将总计行的YEAR_WISE和OFFICE_NAME字段值从空字符串''改为NULL,多数SQL客户端会将NULL显示为空白,匹配期望输出的格式;同时避免空字符串与原字段类型不兼容的报错。
  2. 添加排序逻辑:通过ORDER BY结合CASE表达式,确保总计行排在所有原始数据之后,避免顺序混乱。

修改后的SQL语句

WITH x AS (select * from ..)
SELECT YEAR_WISE, OFFICE_NAME, CATEGORY, KWT_COUNT, NON_KWT_COUNT
FROM x
UNION ALL
SELECT NULL AS YEAR_WISE, NULL AS OFFICE_NAME, 'SUM', SUM(KWT_COUNT), SUM(NON_KWT_COUNT)
FROM x
ORDER BY CASE WHEN CATEGORY = 'SUM' THEN 1 ELSE 0 END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:35:47