각 부서의 최고 급여 직원 이름을 찾되 동률인 직원도 모두 표시하려 한다. 가장 적절한 SQL 접근은?
1
부서별 MAX 급여를 구한 상관 서브쿼리와 각 직원의 급여를 비교한다.
정답 근거현재 직원의 부서를 상관 조건으로 연결하면 각 부서 최고 급여와 같은 모든 직원 행이 남아 동률도 보존된다.
2
전체 직원 중 MAX 급여 하나와 각 직원의 급여를 비교한다.
오답 이유전체 직원의 MAX 하나만 비교하면 회사 전체 최고 급여자만 남고 각 부서의 최고 급여자는 구할 수 없다.
3
급여를 문자열로 변환한 뒤 사전순 첫 행만 선택한다.
오답 이유급여를 문자로 바꾸면 숫자 크기와 사전순이 달라질 수 있고 첫 행만 고르면 최고액 동률도 사라진다.
4
GROUP BY 없이 직원 이름과 MAX(급여)를 함께 조회한다.
오답 이유GROUP BY 없이 직원 이름과 MAX를 함께 선택하면 집계 기준이 불명확하거나 SQL 오류가 나서 직원을 결정할 수 없다.
정답·상세해설
정답 1번
바깥 질의의 직원 행을 `E`라고 하면 상관 서브쿼리는 `E`와 같은 부서의 행만 대상으로 `MAX(급여)`를 계산해야 한다. 바깥 조건에서 `E.급여`와 이 최댓값을 비교하면 부서별 최고 급여자만 남고, 최고액이 같은 직원이 여러 명이어도 모두 참이 되어 동률을 보존한다. 전체 회사의 MAX를 쓰거나 집계되지 않은 직원 이름을 임의로 선택하는 방식은 요구 결과를 만들지 못한다.