문제
다음 [성적] 테이블에서 SQL문을 실행했을 때, 이름이 '이'이고 시험이 '중간'인 행의 prev_score 값을 쓰시오.
| 이름 | 시험 | 점수 |
|---|---|---|
| 김 | 중간 | 80 |
| 이 | 중간 | 75 |
| 박 | 중간 | 85 |
| 김 | 기말 | 90 |
| 이 | 기말 | 82 |
| 박 | 기말 | 78 |
SQLSELECT 이름, 시험, 점수, LAG(점수, 1) OVER (PARTITION BY 이름 ORDER BY CASE WHEN 시험='중간' THEN 1 ELSE 2 END) AS prev_score FROM 성적;
정답
NULL
NULLnullNull
해설
LAG(점수, 1) 함수는 PARTITION BY 이름으로 각 학생별로 파티션을 나누고, ORDER BY로 중간시험(1), 기말시험(2) 순서로 정렬한다. 이름이 '이'인 파티션에서 중간시험 행은 첫 번째 행이 되므로, LAG 함수로 가져올 이전 행이 존재하지 않는다. 따라서 prev_score 값은 NULL이 된다.