문제
- 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
절에 구현하여 데이터를 최종적으로 출력한다.