문제
다음 윈도우 함수의 결과로 가장 적절한 것은?
<데이터>
| GRP | VAL |
|---|---|
| A | 1 |
| A | 3 |
| A | 5 |
| A | 7 |
| B | 2 |
| B | 4 |
SQLSELECT GRP, VAL, SUM(VAL) OVER( PARTITION BY GRP ORDER BY VAL RANGE BETWEEN 2 PRECEDING AND 2 FOLLOWING ) AS SUM_VAL FROM T;
① A: 1,3,5,7 / B: 2,4 ② A: 4,8,12,12 / B: 2,4 ③ A: 4,9,15,12 / B: 6,6 ④ A: 16,16,16,16 / B: 6,6
정답
3번
해설
정답: 3. RANGE 2 PRECEDING AND 2 FOLLOWING은 현재 VAL 기준으로 -2부터 +2 사이의 값을 합산한다.
오답 풀이
- 1번: 원본 값을 그대로 나열한 값이다.
- 2번: 일부 프레임 합산이 잘못되었다.
- 3번: A 그룹은 1→1+3=4, 3→1+3+5=9, 5→3+5+7=15, 7→5+7=12이고 B 그룹은 각각 2+4=6이다.
- 4번: 전체 파티션 합계를 모든 행에 표시한 결과이다.
보충 개념 RANGE 프레임은 물리적인 행 개수가 아니라 ORDER BY 값의 범위를 기준으로 윈도우를 계산한다.