[오늘의 문제] Managers with at Least 5 Direct Reports

shlim55·2026년 1월 6일

코딩테스트

목록 보기
209/223

출처: https://leetcode.com/problems/managers-with-at-least-5-direct-reports/

테이블:Employee

+-------------+---------+
| 열 이름 | 데이터 유형 |
+-------------+---------+
| id | int |
| name | varchar |
| department | varchar |
| managerId | int |
+-------------+---------+
id는 이 테이블의 기본 키(고유 값을 가진 열)입니다.
이 테이블의 각 행은 직원의 이름, 소속 부서 및 관리자의 ID를 나타냅니다.
managerId가 null인 경우 해당 직원은 관리자가 없습니다.
어떤 직원도 자기 자신의 관리자가 될 수 없습니다.

직속 부하 직원이 5명 이상인 관리자를 찾는 솔루션을 작성하세요 .

결과 테이블을 어떤 순서 로든 반환합니다 .

결과 형식은 다음 예시와 같습니다.

예시 1:

입력:
직원 테이블:
+-----+-------+------------+-----------+
| id | name | department | managerId |
+-----+-------+------------+-----------+
| 101 | John | A | null |
| 102 | Dan | A | 101 |
| 103 | James | A | 101 |
| 104 | Amy | A | 101 |
| 105 | Anne | A | 101 |
| 106 | Ron | B | 101 |
+-----+-------+------------+-----------+ 출력:
+------+
| name |
+------+
| John |
+------+

내가 한 풀이

# Write your MySQL query statement below

SELECT e2.name
FROM Employee e1
JOIN Employee e2
ON e1.managerId = e2.id
GROUP BY e2.id, e2.name -- 추가 할 내용
HAVING count(*) >= 5

트러블 슈팅
GROUP BY 절을 넣어줘야 한다.
GROUP BY 없이 HAVING count(*)를 사용하면 전체 결과 행을 하나의 덩어리로 보고 개수를 세어버린다.

더 나아가 두개를 GROUP BY 해야 한다.

이름(e2.name)으로만 묶으면, 만약 동명이인 매니저가 있을 경우 그 둘의 부하직원이 합쳐져서 계산되는 오류가 생길 수 있다.

더 나아가 조인 안쓰는 방법

SELECT name
FROM Employee
WHERE id IN (
    SELECT managerId
    FROM Employee
    GROUP BY managerId
    HAVING COUNT(*) >= 5
);
profile
A Normal Programmer

0개의 댓글