Postgresql - 如何根据阈值计算累积和

问题描述 投票:0回答:1

这是我的示例数据集。给出了 Seq_no 和 value 列,我们需要使用 postgresql 查找 Cum.sum 和 Bucket 列。要查找累积和,我可以写

sum(value) over (order by seq_no rows between unbounded preceding and current row)
。但如果值达到阈值,则重置 cum.sum。例如,阈值是 20 ,行 1,2 和 3 值的总和是 23 ,大于 20 。所以我们重置窗口函数。下一个阈值从 seq_no 4 开始计算。

sql postgresql window-functions
1个回答
0
投票

尝试使用此sql查询根据阈值计算累积和,并在每次达到阈值后重置太阳。

WITH recursive cte AS (
  SELECT
    seq_no,
    value,
    CASE
      WHEN value > 20 THEN 1
      ELSE 0
    END AS reset,
    value AS cum_sum,
    value AS bucket
  FROM your_table
  WHERE seq_no = 1
  
  UNION ALL
  
  SELECT
    t.seq_no,
    t.value,
    CASE
      WHEN cte.cum_sum + t.value > 20 THEN cte.reset + 1
      ELSE cte.reset
    END,
    CASE
      WHEN cte.cum_sum + t.value > 20 THEN t.value
      ELSE cte.cum_sum + t.value
    END,
    cte.reset + 1
  FROM your_table t
  JOIN cte ON t.seq_no = cte.seq_no + 1
)
SELECT seq_no, cum_sum, bucket FROM cte
ORDER BY seq_no;
© www.soinside.com 2019 - 2024. All rights reserved.