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

Oracle SQL:按分组实现时间维度的累计求和问题

问题根源

你的查询未实现分组独立累计的核心原因是:窗口函数缺少PARTITION BY子句,当前的OVER(ORDER BY ...)会对所有数据做全局累计,而非按每个分组单独计算。

正确查询语句

要实现每个分组按时间维度的累计求和,需先按月份+分组聚合当月金额,再通过PARTITION BY "group"将数据按分组拆分后做累计:

SELECT
  month,
  SUM(month_amount) OVER (PARTITION BY "group" ORDER BY month) AS sum_amount,
  "group"
FROM (
  -- 子查询:计算每个月每个分组的当月金额总和
  SELECT
    TO_CHAR(date, 'YYYY-MM') AS month,
    "group",
    SUM(amount) AS month_amount
  FROM your_table
  GROUP BY TO_CHAR(date, 'YYYY-MM'), "group"
) AS monthly_grouped
ORDER BY month, "group";
逻辑说明
  1. 子查询阶段:先聚合得到每个月份、每个分组的当月金额总和(比如2022-2的g1当月总和是3+4=7,g2是1)
  2. 窗口函数阶段:通过PARTITION BY "group"将数据按分组隔离,再按月份排序做累计:
    • g1的2022-2累计值 = 2022-1的2 + 2022-2的7 = 9
    • g2的2022-2累计值 = 2022-1的5 + 2022-2的1 = 6
    • g3仅2022-3有数据,累计值为当月的2
注意事项
  • group是SQL保留关键字,作为字段名时必须用双引号(PostgreSQL)或反引号(MySQL)包裹,避免语法报错
  • 若date是日期类型,建议用DATE_TRUNC('month', date)替代字符串转换,获取月份的效率更高且更可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:24:56