[Leetcode] The Number of Employees Which Report to Each Employee
정답
WITH Managers as (
SELECT
reports_to id,
COUNT(*) reports_count,
ROUND(AVG(age),0) average_age
FROM Employees
GROUP BY reports_to
HAVING reports_to IS NOT NULL
)
SELECT
E.employee_id,
E.name,
M.reports_count,
M.average_age
FROM Employees E
JOIN Managers M
ON E.employee_id = M.id
ORDER BY E.employee_id;
✅ Point
- Manager 조건을 충족시키는 row 로 CTE 선언
GROUP BY reports_to
: 보고할 멤버(reports_to, 곧 Manager을 의미) 묶기HAVING reports_to IS NOT NULL
: GROUP BY의 column에 조건 부여. null인 경우, 매니저 x
다른 풀이
- CTE를 선언하지 않고 JOIN 으로 풀기
SELECT M.employee_id, M.name, COUNT(*) reports_count, ROUND(AVG(E.age), 0) average_age FROM Employees E INNER JOIN Employees M ON E.reports_to = M.employee_id GROUP BY M.employee_id ORDER BY M.employee_id;