sql&用cte计算累计和

5cnsuln7  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(478)

我想在postgres中编写一个非递归公共表表达式(cte)来计算累积和,下面是一个示例,输入表:

  1. ----------------------
  2. 1 | A | 0 | -1
  3. 1 | B | 3 | 1
  4. 2 | A | 1 | 0
  5. 2 | B | 3 | 2

输出应如下所示:

  1. ----------------------
  2. 1 | A | 0 | -1
  3. 1 | B | 3 | 1
  4. 2 | A | 1 | -1
  5. 2 | B | 6 | 3

如您所见,第3列和第4列的累积和是计算出来的,使用递归cte很容易做到这一点,但是如何使用非递归cte呢?

liwlm1x9

liwlm1x91#

使用窗口函数。假设表中有列 col1 , col2 , col3 以及 col4 ,即:

  1. select
  2. t.*,
  3. sum(col3) over(partition by col2 order by col1) col3,
  4. sum(col4) over(partition by col2 order by col1) col4
  5. from mytable t
8aqjt8rx

8aqjt8rx2#

你可以使用一个窗口函数来计算一个累积和。我看不出你的例子中的和是什么,但语法是这样的:

  1. select t.*, sum(x) over (order by y) as cumulative_sum
  2. from t;

以你为例,这似乎是:

  1. select t.*,
  2. sum(col3) over (partition by col2 order by col1) as new_col3,
  3. sum(col4) over (partition by col2 order by col1) as new_col4
  4. from t;

相关问题