PostgreSQL:返回带窗口函数的单行

时间:2014-01-17 22:28:19

标签: sql postgresql aggregate-functions window-functions

我有一个有两级故障的数据集;尝试使用窗口函数(累积和)汇总顶层,但窗口函数不会将输出分组到单个行中。

数据如下所示:

  

日期|顶级a a1 |总结的领域   日期|顶级a a2 |总结的领域   日期|顶级b | b1 |总结的领域   日期|顶级b | b2 |总结的领域   日期|顶级b | b3 |字段总结

我在做:

SUM(field_to_summarize) OVER (partition by top_level order by date) AS CumulativeSum

如上所示,每行返回与每个顶级相同的CumulativeSum。 如何按窗口进行聚合,但每个顶层只返回一行?像这样:

  

日期|顶级a中的累计和   日期|顶级b | b的累积和

1 个答案:

答案 0 :(得分:0)

这是你在找什么?注意sum()over()

中的嵌套和函数
create table myData(
date date
,top_level text
,second_level text
,value int
);

insert into myData values('2012-12-01','A', 'A1', 12);
insert into myData values('2012-12-01','A', 'A2', 19);
insert into myData values('2012-12-01','B', 'B1', 10);
insert into myData values('2012-12-01','B', 'B2', 15);

insert into myData values('2013-01-01','A', 'A1', 10);
insert into myData values('2013-01-01','A', 'A2', 7);
insert into myData values('2013-01-01','B', 'B1', 20);
insert into myData values('2013-01-01','B', 'B2', 35);


select 
date
,top_level
,sum(value) as value_total
,sum(sum(value))over(partition by top_level order by date) as value_running_total
from myData
group by date, top_level
order by top_level, date;

返回:

date; top_level; value_total; value_running_total
"2012-12-01";"A";31;31
"2013-01-01";"A";17;48
"2012-12-01";"B";25;25
"2013-01-01";"B";55;80