0
행을 창 함수에 전달하기 전에 필터 절에서 행을 무시해야합니다. docs에서집계 창의 필터 절이 예상대로 행을 삭제하지 않습니다.
FILTER가 지정되면 filter_clause가 true로 평가되는 입력 행만 창이 함수로 전달됩니다. 다른 행은 버려집니다. 집계 인 창 함수 만 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)
예로 들어 네 번째 행을 가져 가라. 여기서 집계 함수는 마지막 두 개의 짝수 행 (예 : 2와 4)을 수신해야합니다. 따라서 나는이 합이 6이 될 것으로 기대합니다.
나는 오해합니까?
참고 : 이것은 내가 실제로 고민하고있는 문제를 해결하는 고안된 예입니다. 짝수의 이동 합계를 찾는 더 좋은 방법이 분명 있습니다.
:
은 무엇 대신 찾고있는 것은 이것이다. 내가 실제로하려고하는 일을 어떻게해야합니까? – cammil
방금 내 대답을 업데이트했습니다 :-) –
고마워요! 집계 함수가 AVG() 인 경우 행 수가 달라집니다. – cammil