テーブルのさまざまな次元のパーセンテージを計算する必要があります。私は分母を計算するためにウィンドウ関数を使用して事を簡素化したいと思いますが、分子は集合体でなければならないので問題があります。簡単な例として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のうちd2の合計の全体的なシェアを計算することです。今、私はエラーを取得し、しかし
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
私はこれがあるためであると仮定していますので、私はこれを試してみてください
"b";"x";1.00
"a";"x";0.25
"a";"y";0.75
:私は探しています出力はこれですウィンドウ関数がグループ化節で考慮されていないと不平を言っていますが、ウィンドウ化関数をグループ化節に入れることはできません。
これは、PostgreSQL 8.4のフォークで、同じウィンドウ機能を共有するGreenplum 4.1を使用しています。 Greenplumは相関サブクエリを実行できないことに注意してください。
素晴らしいよ!それは私が後にしたものです。意味をなさないドキュメントは、このようなことについてはっきりしているわけではありません。 – EvilPuppetMaster
@erwinBrandsletter私の人生を保存しました!ありがとう – isJustMe