문제
아래 SQL 결과를 출력하는 SQL로 알맞은 것은?
| COL1 | COL2 |
|---|---|
| 1 | NULL |
| 2 | 1 |
| 3 | 2 |
<조건> COL1 기준으로 정렬했을 때 이전 행의 COL1 값을 COL2처럼 출력한다.
① SELECT COL1, LAG(COL1) OVER (ORDER BY COL1) AS COL2 FROM T ② SELECT COL1, LEAD(COL1) OVER (ORDER BY COL1) AS COL2 FROM T ③ SELECT COL1, FIRST_VALUE(COL1) OVER (ORDER BY COL1) AS COL2 FROM T ④ SELECT COL1, ROW_NUMBER() OVER (ORDER BY COL1) AS COL2 FROM T
정답
1번
해설
정답: 1. LAG는 현재 행 기준 이전 행의 값을 가져오므로 COL1이 1일 때 NULL, 2일 때 1, 3일 때 2를 반환한다.
오답 풀이
- 1번: 이전 행 값을 가져오는 LAG 사용이 적절하다.
- 2번: LEAD는 다음 행 값을 가져온다.
- 3번: FIRST_VALUE는 윈도우의 첫 번째 값을 반환한다.
- 4번: ROW_NUMBER는 행 번호를 반환한다.
보충 개념 LAG는 이전 행, LEAD는 다음 행의 값을 참조하는 윈도우 함수이다. 시계열 비교나 이전 값 대비 변화량 계산에 자주 사용된다.