如何在 SQL 中找到两列的 运行 总和

How to find running sum over two columns in SQL

我有一个 table 这样的:

month region    value
4/1/20  eu-west-2   110
3/1/20  eu-west-2   30
2/1/20  eu-west-2   13
2/1/20  us-west-2   2
1/1/20  us-west-2   242
4/1/20  us-west-2   240

我想计算每个区域每个月的 'value' 列的累计总和。例如:使用上面的示例答案应该是:

month region cumulative_sum
4/1/20 eu-west-2  153
3/1/20 eu-west-2  43
2/1/20 eu-west-2  13
4/1/20 us-west-2  484
2/1/20 us-west-2  244
1/1/20 us-west-2  242

当我只找到每个月的累计总和时,我能够成功编写查询,但是当我向它添加区域时它不起作用:

select
month, sum(value) over (order by month rows unbounded preceding) as cumulative_sum
from table

但当我这样做时:

  select
    month, region, sum(value) over (order by month,region rows unbounded preceding) as cumulative_sum
    from table

它给出了错误的结果。

请帮忙。

假设 month 是一个类日期数据类型的列,你可以这样做:

select
    month,
    region,
    sum(value) over(
        partition by region, date_trunc('month', month)
        order by month
    ) cumulative_sum
from mytable

window sum()partition by 子句将属于同一月份和地区的行放在一起。每次区域更改或新月份开始时,总和都会重置。

你很接近,除了你错过了 partition by:

select month, region,
       sum(value) over (partition by region order by month rows unbounded preceding) as cumulative_sum
from table