문제
아래 SQL의 실행 결과로 가장 적절한 것은?
<사원>
| 사원ID | 부서ID | 사원명 | 연봉 |
|---|---|---|---|
| 001 | 100 | 홍길동 | 2500 |
| 002 | 100 | 강감찬 | 3000 |
| 003 | 200 | 김유신 | 4500 |
| 004 | 200 | 김선달 | 3000 |
| 005 | 200 | 유학생 | 2500 |
| 006 | 300 | 변사또 | 4500 |
| 007 | 300 | 박문수 | 3000 |
SQLSELECT Y.사원ID, Y.부서ID, Y.사원명, Y.연봉 FROM ( SELECT 사원ID, MAX(연봉) OVER(PARTITION BY 부서ID) AS 최고연봉 FROM 사원 ) X, 사원 Y WHERE X.사원ID = Y.사원ID AND X.최고연봉 = Y.연봉;
① 사원ID 003 김유신 4500, 사원ID 006 변사또 4500 ② 사원ID 001 홍길동 2500, 사원ID 005 유학생 2500, 사원ID 007 박문수 3000 ③ 사원ID 002 강감찬 3000, 사원ID 003 김유신 4500, 사원ID 006 변사또 4500 ④ 사원ID 003 김유신 4500
정답
3번
해설
정답: 3. 부서별 최고 연봉은 100부서 3000, 200부서 4500, 300부서 4500이므로 해당 연봉을 받는 강감찬, 김유신, 변사또가 조회된다.
오답 풀이
- 1번: 100부서의 최고 연봉자인 강감찬이 누락되었다.
- 2번: 부서별 최저 또는 다른 기준의 결과이다.
- 3번: 각 부서별 최고 연봉자를 모두 포함한다.
- 4번: 200부서 최고 연봉자만 포함되어 부족하다.
보충 개념 MAX(연봉) OVER(PARTITION BY 부서ID)는 각 사원 행에 해당 부서의 최고 연봉을 함께 표시한다. 이후 자신의 연봉이 부서 최고 연봉과 같은 행만 필터링하면 부서별 최고 연봉자를 구할 수 있다.