我需要計算表中各種維度的百分比。我想通過使用窗函數來計算分母來簡化事情,但是我遇到了一個問題,因爲分子必須是一個聚合。如何使用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