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

如何按Contract分组、Year排序计算Paid列的累计总和?

按合同分组、年份排序的累计付费金额计算方案

正确SQL实现

直接使用带ORDER BY的窗口聚合函数即可实现跨多行的累计求和,无需手动用LAG迭代:

SELECT 
    Contract,
    [Year],
    Paid,
    SUM(Paid) OVER (
        PARTITION BY Contract 
        ORDER BY [Year]
        -- 以下子句可省略,多数SQL引擎在ORDER BY后默认采用此范围
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS SUMPaid
FROM YourTable;

方案说明

  • PARTITION BY Contract:限定仅在同一合同分组内计算累计值
  • ORDER BY [Year]:指定累计的顺序为年份升序,确保按时间先后累加
  • SUM(Paid) OVER (...):对当前行及分组内所有之前行的Paid值求和,自动处理任意年份数量的合同数据

之前方案的问题分析

  • 仅用SUM(Paid) OVER (PARTITION BY Contract):会直接计算整个合同分组的总付费,而非按年份的累计值
  • Paid + LAG(Paid,1) OVER (...):仅能累加当前行与上一行的值,无法自动迭代累加所有历史行,因此合同年份超过2年时无法得到正确的累计总和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:30:55