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

Oracle SQL实现表数据总合计、累计求和、按季度求和方法

Oracle SQL实现三类统计求和方案

以下示例基于给出的测试表结构编写,假设表名为emp_sal,包含字段NAME(姓名)、AGE(年龄)、SAL(薪资)、MONTH(月份英文缩写)。


1. 普通总合计

全表所有薪资的总合计,每一行都展示相同的总计值,直接使用无分区排序的窗口函数即可:

SELECT
  NAME,
  AGE,
  SAL,
  SUM(SAL) OVER () AS TOTAL_SUM
FROM emp_sal;

执行后所有行的TOTAL_SUM字段都会返回全表SAL总和700,和预期结果一致。


2. 累计求和(Running Sum)

按自然月顺序逐行累加薪资,得到截止当前月的累计值。需要注意按月份的自然顺序排序,不要直接按字符串排序避免顺序错乱:

SELECT
  NAME,
  AGE,
  SAL,
  SUM(SAL) OVER (
    ORDER BY TO_DATE(MONTH, 'MON', 'NLS_DATE_LANGUAGE = AMERICAN')
  ) AS RUNNING_SUM
FROM emp_sal;

语句中通过TO_DATE指定英文月份格式转换,加上NLS_DATE_LANGUAGE参数避免不同数据库语言环境下识别月份失败,最终会按JAN→FEB→SEP→OCT→DEC的顺序逐行累加,得到需要的累计结果。


3. 季度求和

按自然季度分组,计算每个季度的薪资总和,同季度的行展示相同的季度合计值:

SELECT
  NAME,
  AGE,
  SAL,
  MONTH,
  SUM(SAL) OVER (
    PARTITION BY TO_CHAR(
      TO_DATE(MONTH, 'MON', 'NLS_DATE_LANGUAGE = AMERICAN'), 
      'Q'
    )
  ) AS QUARTER_SUM
FROM emp_sal;

语句先将月份转换为日期后提取季度值作为分区键,同分区(同季度)的薪资会被汇总:

  • 第一季度(JAN、FEB)合计250
  • 第三季度(SEP)合计200
  • 第四季度(OCT、DEC)合计250
    和预期输出完全匹配。

如果表中MONTH字段本身是DATE类型,不需要嵌套TO_DATE转换,直接按日期字段排序、提取季度即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:24:28