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

能否通过同类型窗口表达式实现累积求和与分区特定范围求和?

能否用同一种表达式实现累积求和与分区特定范围求和?

不能用完全相同的窗口表达式同时生成这两个求和结果,因为它们的窗口帧范围(ROWS子句)逻辑完全不同:

  • 累积求和需要的是从分区起始行到当前行的范围:ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  • 特定范围求和需要的是当前行前后各2行的范围:ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING

不过你可以通过定义公共的窗口框架来减少代码重复,不用重复写PARTITION BY和ORDER BY部分,示例如下:

SELECT
    "class",
    "year",
    "mass",
    -- 累积求和:复用公共窗口并指定对应帧范围
    SUM("mass") OVER (common_window ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS "cumulative_sum",
    -- 特定范围求和:复用公共窗口并指定对应帧范围
    SUM("mass") OVER (common_window ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AS "partition_sum"
FROM your_table
-- 定义公共窗口:包含分区和排序规则
WINDOW common_window AS (PARTITION BY "class" ORDER BY "year" ASC);

你原本的写法是完全正确的,上述方式只是简化了代码结构,核心逻辑还是需要针对两种求和需求分别指定对应的窗口帧范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:00:14