我需要计算表中各种维度的百分比。我想通过使用窗函数来计算分母来简化事情,但是我遇到了一个问题,因为分子必须是一个聚合。如何使用SQL窗口函数来计算聚合的百分比
举个简单的例子,采取如下表:
create temp table test (d1 text, d2 text, v numeric);
insert into test values ('a','x',5), ('a','y',5), ('a','y',10), ('b','x',20);
如果我只是想计算每个单排的份额从D1,那么窗口函数正常工作:
select d1, d2, v/sum(v) over (partition by d1)
from test;
"b";"x";1.00
"a";"x";0.25
"a";"y";0.25
"a";"y";0.50
但是,我需要做的就是计算出d1和d1之和的总体份额。我找的输出是这样的:
"b";"x";1.00
"a";"x";0.25
"a";"y";0.75
所以我试试这个:
select d1, d2, sum(v)/sum(v) over (partition by d1)
from test
group by d1, d2;
不过,现在我得到一个错误:
ERROR: column "test.v" must appear in the GROUP BY clause or be used in an aggregate function
我假设这是因为它抱怨窗口函数没有在分组子句中说明,但窗口函数无论如何都不能放在分组子句中。
这是使用Greenplum 4.1,它是Postgresql 8.4的一个分支,共享相同的窗口函数。请注意,Greenplum不能执行相关的子查询。
啊太棒了!那就是我所追求的。说得通。这些文档在这个东西上并不清楚。 – EvilPuppetMaster 2011-12-21 09:16:08