06/30 SQL 문제풀이 - (⭐⭐⭐) 2988. Manager of the Largest Department (Leetcode)

Data Architect / Engineer·2024년 6월 30일
1

1일_1SQL

목록 보기
60/63
post-thumbnail

문제

  • 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_01COUNT(*) 함수를 이용하여 만든다.

  • 이후, 직원수가 가장 많은 dep_id를 구하기 위한 임시테이블 temp_02를 만든다.
    cnt 값이 위에서 구한 부서별 직원 수 테이블 temp_01에서 가장 큰 값을 가질 때 직원수가 가장 많은 부서이다. (단, 직원수가 가장 많은 부서가 2개 이상일 수 있다.)

  • 서브쿼리를 통해 WHERE절에 조건을 준다. (cnt = (SELECT MAX(cnt) FROM temp_01))

  • 최종으로 문제에서 요구하는 데이터를 구한다. WHERE 절에 첫 번째 조건으로 dep_idtemp_02 테이블에 있는 경우만 구한다. (즉, 사원 수를 최대로 가지는 부서의 id만을 추출)

  • 문제에서 각 부서의 Manager를 구하라고 했으므로,WHERE 절에 두 번째 조건으로 position이 Manager인 데이터를 구한다.

  • 위의 조건을 만족하는 데이터를 Employees 테이블에서 emp_name 컬럼명을 manager_name으로 출력하고, dep_id를 출력한다.

  • 문제의 요구사항에 따라 ORDER BY를 통해 dep_id 기준 오름차순으로 데이터를 정렬한다.


⭐⭐⭐
WITH 임시테이블을 통해 부서별 직원 수 데이터를 구하고(temp_01), 이후 직원 수가 최대값을 가지는 부서와 직원 수 데이터를 구한다.(temp_02)

이후 문제에서 조어진 조건 (Manager, 최대 직원 수를 가진 부서)을 WHERE절에 구현하여 데이터를 최종적으로 출력한다.

profile
질문은 계속돼 아오에

0개의 댓글