문제
다음 복잡한 SQL 쿼리의 실행 결과로 가장 적절한 것은?
SQLSELECT CASE WHEN COUNT(*) = COUNT(DISTINCT department_id) THEN 'UNIQUE' WHEN COUNT(DISTINCT department_id) = 0 THEN 'EMPTY' ELSE 'DUPLICATE' END as result FROM employees WHERE salary > ( SELECT AVG(salary) * 1.2 FROM employees e2 WHERE e2.department_id = employees.department_id )
① 전체 직원의 평균 급여 대비 각 부서의 고급여자 비율을 계산한다 ② 각 부서별로 평균 급여의 120%를 초과하는 직원이 있으면 'DUPLICATE'를 반환한다 ③ 조건을 만족하는 직원들의 부서가 모두 다르면 'UNIQUE', 없으면 'EMPTY', 중복되면 'DUPLICATE'를 반환한다 ④ 상관 부쿼리에서 department_id가 일치하지 않아 결과가 NULL을 반환한다
정답
3번
해설
③이 정답이다. 이 쿼리는 각 부서별 평균 급여의 120%를 초과하는 직원들을 찾는 상관 부쿼리를 사용한다. WHERE 절에서 외부 테이블 employees를 직접 참조하는 것은 유효한 문법이다. 메인 쿼리는 조건을 만족하는 직원들의 department_id를 분석하여, 모든 부서가 다르면 'UNIQUE', 조건을 만족하는 직원이 없으면 'EMPTY', 같은 부서의 직원이 여러 명이면 'DUPLICATE'를 반환한다. ①②는 쿼리의 실제 동작을 잘못 해석했고, ④는 상관 부쿼리의 동작 원리를 오해한 것이다.