如何在 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
我有一个 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