데이터엔지니어링/SQL

leetcode - 1731번 문제 풀이

루피처럼 2025. 5. 24. 20:07

이 문제의 경우 관리자를 1명 이상의 다른 직원이 보고하는 직원으로 간주합니다.

모든 관리자의 ID와 이름, 관리자에게 직접 보고하는 직원 수, 보고서의 평균 연령을 가장 가까운 정수로 반올림하는 솔루션을 작성하시오.

employee_id 순으로 정렬된 결과 테이블을 반환합니다.

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

Input: 
Employees table:
+-------------+---------+------------+-----+
| employee_id | name    | reports_to | age |
+-------------+---------+------------+-----+
| 9           | Hercy   | null       | 43  |
| 6           | Alice   | 9          | 41  |
| 4           | Bob     | 9          | 36  |
| 2           | Winston | null       | 37  |
+-------------+---------+------------+-----+
Output: 
+-------------+-------+---------------+-------------+
| employee_id | name  | reports_count | average_age |
+-------------+-------+---------------+-------------+
| 9           | Hercy | 2             | 39          |
+-------------+-------+---------------+-------------+

 

 

WITH A AS (
SELECT
    reports_to,
    AVG(age) AS average_age,
    COUNT(*) AS reports_count
FROM Employees
GROUP BY reports_to
)

SELECT
    E.employee_id,
    E.name,
    reports_count,
    ROUND(average_age) AS average_age
FROM A 
JOIN Employees AS E
ON A.reports_to = E.employee_id
ORDER BY employee_id

 

1. WITH문을 만든다.

2. 먼저 reports_to(관리자번호)를 기준으로 GROUP BY하기

3. AVG,COUNT를 구한다.

4. A테이블과 원본 테이블에서 employee_id와 reports_to를 연결해서 JOIN하면 name을 알 수 있다.

5. ORDER BY로 employee_id를 기준으로 한다.