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

Oracle SQL如何按Zone和Site分组添加总计列?

实现按Zone和Site分组求和并添加总计列

当然可以搞定这个需求!你需要用到窗口函数(Window Functions),它能完美实现「保留所有原始行数据,同时添加分组统计值」的效果。

原始数据

ZONESITEBRANDVALUE
northaa_brand110
northaa_brand215
northaa_brand327
southbb_brand117
southbb_brand25
southbb_brand356

解决方案(推荐:窗口函数)

使用SUM()窗口函数,通过PARTITION BY指定分组规则,就能为每一行添加上对应Zone+Site的总和:

SELECT 
    ZONE,
    SITE,
    BRAND,
    VALUE,
    SUM(VALUE) OVER (PARTITION BY ZONE, SITE) AS TOTAL_IN_SITE
FROM your_table_name;

语句说明:

  • SUM(VALUE):计算VALUE列的总和
  • OVER (PARTITION BY ZONE, SITE):将数据按ZONE和SITE的组合划分成不同的「窗口」,每个窗口内独立计算总和
  • 这种方式不会像普通GROUP BY那样合并行,能保留所有原始数据的同时新增总计列

执行结果

ZONESITEBRANDVALUETOTAL_IN_SITE
northaa_brand11052
northaa_brand21552
northaa_brand32752
southbb_brand11778
southbb_brand2578
southbb_brand35678

兼容旧版本数据库的替代方案

如果你的数据库不支持窗口函数(比如MySQL 5.7及更早版本),可以用子查询+关联的方式实现:

SELECT 
    t1.ZONE,
    t1.SITE,
    t1.BRAND,
    t1.VALUE,
    t2.TOTAL_IN_SITE
FROM your_table_name t1
JOIN (
    -- 先计算每个Zone+Site的总和
    SELECT ZONE, SITE, SUM(VALUE) AS TOTAL_IN_SITE
    FROM your_table_name
    GROUP BY ZONE, SITE
) t2 ON t1.ZONE = t2.ZONE AND t1.SITE = t2.SITE;

这个方法先通过子查询得到分组总和,再将其与原表关联,从而为每一行匹配对应的总计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:21:02