문제
다음 [성과] 테이블에서 SQL문을 실행했을 때, 직원명이 '이순신'인 행의 max_score 값을 쓰시오.
| 직원명 | 부서 | 점수 |
|---|---|---|
| 홍길동 | 영업 | 90 |
| 이순신 | 영업 | 85 |
| 김철수 | 개발 | 95 |
| 박영희 | 개발 | 88 |
| 최민수 | 개발 | 92 |
SQLSELECT 직원명, MAX(점수) OVER (PARTITION BY 부서 ORDER BY 점수 DESC ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS max_score FROM 성과;
정답
90
90
해설
MAX() OVER 윈도우 함수가 PARTITION BY 부서로 파티션을 나누고, ORDER BY 점수 DESC로 내림차순 정렬한다. ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING은 현재 행 기준 앞뒤 1개 행씩 총 3개 행의 범위를 의미한다. 영업 부서에서 점수 내림차순 정렬 시 홍길동(90), 이순신(85) 순이다. 이순신의 경우 1 PRECEDING(홍길동:90), CURRENT ROW(이순신:85), 1 FOLLOWING(없음) 범위에서 최댓값은 90이다.