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

Snowflake SQL实现分组总和减去逐月累计金额的需求求助

Snowflake SQL 实现目标列计算

问题分析

你要生成的目标列逻辑是:按Region(区域)和Type(类型)分组的总金额,减去截至当前月份的累计金额(含当月)。现有代码的问题在于:

  • lag(amount) 只能取上一行的单月金额,无法计算累计值;
  • 窗口函数的partition by错误包含了month,导致分组逻辑失效;
  • sum - amt 仅用总金额减去当月金额,没有累计的逻辑。

正确SQL实现

SELECT
    region,
    type,
    month,
    amount,
    -- 分组总金额减去截至当前月的累计金额,得到目标列
    SUM(amount) OVER (PARTITION BY region, type) - 
    SUM(amount) OVER (PARTITION BY region, type ORDER BY month) AS target_amount
FROM your_table_name;

代码说明

  1. 分组总金额:SUM(amount) OVER (PARTITION BY region, type) 计算每个Region+Type组合的所有月份金额总和;
  2. 累计金额:SUM(amount) OVER (PARTITION BY region, type ORDER BY month) 按月份排序,默认计算从第一个月到当前月的累计金额(等价于ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW);
  3. 目标列:用分组总金额减去累计金额,得到符合需求的结果。

对应你举的示例:

  • USA+Apple总金额170,第一行累计10,170-10=160;第二行累计10+20=30,170-30=140,完全匹配预期;
  • Europe+Orange总金额135,第13行累计10,135-10=125;第14行累计10+5=15,135-15=120,也符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:02:47