PostgreSQL:使用窗口函数返回单行
Posted
技术标签:
【中文标题】PostgreSQL:使用窗口函数返回单行【英文标题】:PostgreSQL: Return a single row with window function 【发布时间】:2014-01-17 22:28:18 【问题描述】:我有一个具有两级细分的数据集;尝试使用窗口函数(累积和)在顶层进行汇总,但窗口函数不会将输出分组到单行中。
数据如下:
日期 |***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 | a的累计金额 日期 |顶层b | b的累计和
【问题讨论】:
不只是简单的select top_level, sum(field_to_summarize) form my_table group by top_level order by top_level
吗?请注意,最后一行的累积总和将等于所有值的总和,直到并包括按组中的最后一行
如果我只想要一次性运行总计,这很有效。但我也需要按日期分组,以获得每月的运行总数。还有其他想法吗?
只需按顶层添加组
【参考方案1】:
这就是你要找的吗?注意 sum()over() 中嵌套的 sum 函数
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
【讨论】:
我只是来这里更新,我将尝试这样的事情,尽管我的方法不太优雅。现在试试这个。稍后会更新。谢谢! 是的。就是这个。谢谢 Sashikanth!以上是关于PostgreSQL:使用窗口函数返回单行的主要内容,如果未能解决你的问题,请参考以下文章
使用'parititon by'和窗口函数在postgres中返回多于一行?