首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CTE计算累计和

使用CTE计算累计和
EN

Stack Overflow用户
提问于 2020-07-15 08:18:22
回答 2查看 104关注 0票数 0

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

代码语言:javascript
复制
----------------------
 1  |  A  |  0  | -1
 1  |  B  |  3  |  1
 2  |  A  |  1  |  0
 2  |  B  |  3  |  2

输出应如下所示:

代码语言:javascript
复制
----------------------
 1  |  A  |  0  | -1
 1  |  B  |  3  |  1
 2  |  A  |  1  | -1
 2  |  B  |  6  |  3

正如您所看到的,计算了第3列和第4列的累积总和,使用递归CTE很容易做到这一点,但是如何使用非递归CTE来实现呢?

EN

回答 2

Stack Overflow用户

发布于 2020-07-15 08:19:50

使用窗口函数。假设您的表具有列col1col2col3col4,则为:

代码语言:javascript
复制
select
    t.*,
    sum(col3) over(partition by col2 order by col1) col3,
    sum(col4) over(partition by col2 order by col1) col4
from mytable t
票数 2
EN

Stack Overflow用户

发布于 2020-07-15 08:19:30

您可以使用窗口函数来计算累积和。我不明白你的例子中的总和是多少,但是语法是这样的:

代码语言:javascript
复制
select t.*, sum(x) over (order by y) as cumulative_sum
from t;

对于您的示例,这似乎是:

代码语言:javascript
复制
select t.*,
       sum(col3) over (partition by col2 order by col1) as new_col3,
       sum(col4) over (partition by col2 order by col1) as new_col4
from t;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62905773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档