0
フィルタ句は、行をウィンドウ関数に渡す前に行を破棄すると考えます。集計ウィンドウのフィルタ句は、期待通りに行を破棄しません。
フィルタが指定された場合、filter_clauseが真と評価される唯一の入力行は窓関数に供給される; docsから他の行は破棄されます。集計であるウィンドウ関数のみがFILTER句を受け入れます。
ただし、以下の試験がこれと矛盾すると思われる:
create table test_1 as
select generate_series(1,10) as num;
select
*,
sum(num) over last_2,
sum(num) filter (where num % 2 = 0) over last_2
from test_1
window
last_2 as (order by num rows 1 preceding)
;
これは戻します
num | sum | sum
-----+-----+--------
1 | 1 | [null]
2 | 3 | 2
3 | 5 | 2
4 | 7 | 4
5 | 9 | 4
6 | 11 | 6
7 | 13 | 6
8 | 15 | 8
9 | 17 | 8
10 | 19 | 10
(10 rows)
は、一例として4行目を取ります。ここで、集合関数は、最後の2つの偶数行(すなわち、2および4)を受け取るべきである。だから私はこの合計が6になると期待します。
私は何を誤解していますか?
注:これは、私が実際に苦労している問題を掘り下げて考案した例です。明らかに偶数の移動合計を見つけるより良い方法があります。
:
は、あなたが代わりを探していることはこれです。私が実際にやろうとしていることは、どうしたらいいですか? – cammil
私はちょうど私の答えを更新しました:-) –
ありがとう!集計関数が行数に依存するAVG()の場合はどうなりますか? – cammil