다음 SQL 의 실행 결과로 옳은 것은?[월별청구]월금액1402703(… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 10회
다음 SQL 의 실행 결과로 옳은 것은?[월별청구]
| 월 | 금액 |
|---|---|
| 1 | 40 |
| 2 | 70 |
| 3 | (null) |
| 4 | 20 |
| 5 | 60 |
SELECT 월, 금액,
MAX(금액) OVER (ORDER BY 월
ROWS BETWEEN 1 PRECEDING
AND 1 FOLLOWING) AS 이웃최대,
LEAD(금액, 1, 0) OVER (ORDER BY 월) AS 다음
FROM 월별청구
ORDER BY 월;1
| 월 | 금액 | 이웃최대 | 다음 |
|---|---|---|---|
| 1 | 40 | 70 | 70 |
| 2 | 70 | 70 | 0 |
| 3 | (null) | 70 | 20 |
| 4 | 20 | 60 | 60 |
| 5 | 60 | 60 | 0 |
2
| 월 | 금액 | 이웃최대 | 다음 |
|---|---|---|---|
| 1 | 40 | 70 | 70 |
| 2 | 70 | 70 | (null) |
| 3 | (null) | 70 | 20 |
| 4 | 20 | 60 | 60 |
| 5 | 60 | 60 | 0 |
3
| 월 | 금액 | 이웃최대 | 다음 |
|---|---|---|---|
| 1 | 40 | 70 | 70 |
| 2 | 70 | 70 | (null) |
| 3 | (null) | 70 | 20 |
| 4 | 20 | 60 | 60 |
| 5 | 60 | 60 | (null) |
4
| 월 | 금액 | 이웃최대 | 다음 |
|---|---|---|---|
| 1 | 40 | 40 | 70 |
| 2 | 70 | 70 | (null) |
| 3 | (null) | 70 | 20 |
| 4 | 20 | 70 | 60 |
| 5 | 60 | 70 | 0 |
해설
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING 은 앞·현재·뒤 한 행씩 세 행 중 최댓값을 구하므로 4월은 NULL·20·60 중 60이다.
LEAD(금액, 1, 0) 의 기본값 0은 다음 행이 없는 5월에만 쓰이고, 2월은 다음 행 금액이 실제 NULL 이라 NULL 이 나온다.
- 2월 다음을 0으로 쓴 표는 기본값이 NULL 값까지 대신한다고 본 오해이다.
- 이웃최대가 40·70·70·70·70 인 표는 처음부터 현재 행까지의 누적 프레임으로 계산했다.
- 5월 다음을 NULL 로 쓴 표는 세 번째 인수인 기본값을 무시했다.
오류나 개정된 내용이 보이면 알려주세요