
문제
- LeetCode SQL 문제
2988. Manager of the Largest Department / Medium- 문제 내용 : [링크]
내가 작성한 Query
WITH temp_01 AS( SELECT dep_id , count(*) as cnt FROM Employees GROUP BY dep_id ), temp_02 as( SELECT dep_id FROM temp_01 WHERE cnt = (SELECT MAX(cnt) FROM temp_01) ) SELECT emp_name as manager_name , dep_id FROM Employees WHERE dep_id IN (SELECT * FROM temp_02) AND position = 'Manager' ORDER BY dep_id ASC
각 dep_id별 직원 수를 집계하는 임시테이블 temp_01을 COUNT(*) 함수를 이용하여 만든다.
이후, 직원수가 가장 많은 dep_id를 구하기 위한 임시테이블 temp_02를 만든다.
cnt 값이 위에서 구한 부서별 직원 수 테이블 temp_01에서 가장 큰 값을 가질 때 직원수가 가장 많은 부서이다. (단, 직원수가 가장 많은 부서가 2개 이상일 수 있다.)
서브쿼리를 통해 WHERE절에 조건을 준다. (cnt = (SELECT MAX(cnt) FROM temp_01))
최종으로 문제에서 요구하는 데이터를 구한다. WHERE 절에 첫 번째 조건으로 dep_id가 temp_02 테이블에 있는 경우만 구한다. (즉, 사원 수를 최대로 가지는 부서의 id만을 추출)
문제에서 각 부서의 Manager를 구하라고 했으므로,WHERE 절에 두 번째 조건으로 position이 Manager인 데이터를 구한다.
위의 조건을 만족하는 데이터를 Employees 테이블에서 emp_name 컬럼명을 manager_name으로 출력하고, dep_id를 출력한다.
문제의 요구사항에 따라 ORDER BY를 통해 dep_id 기준 오름차순으로 데이터를 정렬한다.
⭐⭐⭐
WITH 임시테이블을 통해 부서별 직원 수 데이터를 구하고(temp_01), 이후 직원 수가 최대값을 가지는 부서와 직원 수 데이터를 구한다.(temp_02)
이후 문제에서 조어진 조건 (Manager, 최대 직원 수를 가진 부서)을 WHERE절에 구현하여 데이터를 최종적으로 출력한다.
