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

如何为SQL查询结果添加按code聚合的汇总行?

如何在SQL查询中添加Code级别的汇总行

当然可以实现这个需求!针对你已经完成的按category和code汇总的查询,我们可以通过两种常用方式添加同一code下所有category的汇总行(category字段显示为NULL):

方法1:使用ROLLUP自动生成汇总行

ROLLUP是SQL内置的分组汇总语法,能在现有分组结果的基础上,自动生成更高层级的汇总行,非常适合你的场景:

SELECT 
    -- 判断是否为汇总行,是则返回NULL,否则保留原category值
    CASE WHEN GROUPING(category) = 1 THEN NULL ELSE category END AS category,
    code,
    SUM(items_quantity) AS total_items_quantity
FROM (
    SELECT 
        year_field, 
        month_field, 
        code, 
        category, 
        SUM((CAST(items as INT)) / 10) AS items_quantity
    FROM test
    WHERE category IN ('C', 'P')
    GROUP BY year_field, month_field, code, category
) a
WHERE year_field = '2019' AND month_field = '01' AND code IN ('O', 'M')
-- 按code分组,同时对category生成汇总行
GROUP BY code, ROLLUP(category)
-- 排序让结果更清晰:先按code,再按category(汇总行排在对应code的最后)
ORDER BY code, category;

关键细节说明:

  • GROUPING(category):专门用于识别ROLLUP生成的汇总行,返回1表示当前行是汇总行,此时我们把category设为NULL;返回0则是原始分组行,保留原category值。
  • 因为你的year_field和month_field是字符串类型,所以WHERE条件里用'2019'和'01'匹配更规范,避免隐式转换的潜在问题。

方法2:使用UNION ALL合并原始结果与汇总结果

如果你的SQL环境不支持ROLLUP(比如部分轻量型数据库),可以用UNION ALL手动合并两类结果:

-- 第一部分:原有的按category+code分组的结果
SELECT 
    category,
    code,
    SUM(items_quantity) AS total_items_quantity
FROM (
    SELECT 
        year_field, 
        month_field, 
        code, 
        category, 
        SUM((CAST(items as INT)) / 10) AS items_quantity
    FROM test
    WHERE category IN ('C', 'P')
    GROUP BY year_field, month_field, code, category
) a
WHERE year_field = '2019' AND month_field = '01' AND code IN ('O', 'M')
GROUP BY code, category

-- 合并code级别的汇总结果
UNION ALL

-- 第二部分:按code单独汇总,category设为NULL
SELECT 
    NULL AS category,
    code,
    SUM(items_quantity) AS total_items_quantity
FROM (
    SELECT 
        year_field, 
        month_field, 
        code, 
        SUM((CAST(items as INT)) / 10) AS items_quantity
    FROM test
    WHERE category IN ('C', 'P')
    GROUP BY year_field, month_field, code
) a
WHERE year_field = '2019' AND month_field = '01' AND code IN ('O', 'M')
GROUP BY code

-- 统一排序
ORDER BY code, category;

关键细节说明:

  • 第一部分完全保留你原有的查询逻辑,确保得到按category和code的明细汇总。
  • 第二部分去掉category分组,专门统计每个code下所有category的总和,并将category设为NULL。
  • 使用UNION ALL而非UNION,避免系统自动去重,保证结果的完整性。

示例结果验证

用你提供的测试数据执行上述任一查询,都会得到如下结构的结果:

categorycodetotal_items_quantity
CM110
PM41
NULLM151
CO103
PO5
NULLO108

既保留了原有的分组明细,又添加了你需要的code级汇总行。

内容的提问来源于stack exchange,提问作者tube-builder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:24:53