다음 SQL 의 실행 결과로 옳은 것은?[혈압측정]회차수축기11302(… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 6회
다음 SQL 의 실행 결과로 옳은 것은?[혈압측정]
| 회차 | 수축기 |
|---|---|
| 1 | 130 |
| 2 | (null) |
| 3 | 125 |
| 4 | 140 |
SELECT 회차, 수축기,
LAG(수축기, 1, 0) OVER (ORDER BY 회차) AS 이전,
LAST_VALUE(수축기) OVER (ORDER BY 회차
ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING) AS 마지막
FROM 혈압측정
ORDER BY 회차;1
| 회차 | 수축기 | 이전 | 마지막 |
|---|---|---|---|
| 1 | 130 | 0 | 130 |
| 2 | (null) | 130 | (null) |
| 3 | 125 | (null) | 125 |
| 4 | 140 | 125 | 140 |
2
| 회차 | 수축기 | 이전 | 마지막 |
|---|---|---|---|
| 1 | 130 | 0 | 140 |
| 2 | (null) | 130 | 140 |
| 3 | 125 | (null) | 140 |
| 4 | 140 | 125 | 140 |
3
| 회차 | 수축기 | 이전 | 마지막 |
|---|---|---|---|
| 1 | 130 | 0 | 140 |
| 2 | (null) | 130 | 140 |
| 3 | 125 | 0 | 140 |
| 4 | 140 | 125 | 140 |
4
| 회차 | 수축기 | 이전 | 마지막 |
|---|---|---|---|
| 1 | 130 | (null) | 140 |
| 2 | (null) | 130 | 140 |
| 3 | 125 | (null) | 140 |
| 4 | 140 | 125 | 140 |
해설
LAG(수축기, 1, 0) 의 0 은 이전 행이 아예 없는 첫 행에만 쓰이며, 이전 행의 값이 NULL 이면 그대로 NULL 을 가져온다.
프레임을 처음부터 끝까지로 지정한 LAST_VALUE 는 모든 행에서 마지막 회차 값 140 을 돌려준다.
- 마지막이 각 행 자신의 값인 결과는 기본 프레임(현재 행까지)으로 계산한 것이다.
- 3회차 이전을 0으로 본 결과는 기본값이 NULL 값도 대체한다고 오해한 것이다.
- 1회차 이전이 NULL 인 결과는 세 번째 인수를 무시한 것이다.
오류나 개정된 내용이 보이면 알려주세요