https://leetcode.com/problems/the-number-of-employees-which-report-to-each-employee/description/
Column Name | Type |
employee_id | int |
name | varchar |
reports_to | int |
age | int |
Employees 테이블:
- employee_id: 직원의 고유 식별자
- name: 직원의 이름
- reports_to: 해당 직원이 보고하는 매니저의 employee_id (nullable)
- age: 직원의 나이
매니저들의 employee_id와 이름, 그들에게 직접 보고하는 직원 수, 해당 직원들의 평균 나이(가장 가까운 정수로 반올림)를 보고하는 쿼리를 작성해야 합니다. 결과는 employee_id로 정렬되어야 합니다.
select
reports_to,
count(reports_to) reports_count ,
round(avg(age)) average_age
from Employees
where reports_to is not null
group by reports_to
먼저 매니저별로 보고 받는 사람들의 평균 나이와 보고하는 사람들의 수를 구한다.
select
E.employee_id,
E.name,
managed.reports_count,
managed.average_age
from Employees E inner join
(
select
reports_to,
count(reports_to) reports_count ,
round(avg(age)) average_age
from Employees
where reports_to is not null
group by reports_to
) managed on E.employee_id = managed.reports_to
서브쿼리에서 group by된 reports_to는 메인쿼리의 employee_id와 같으므로 두 열을 기준으로 결합해준다. 그리고 필요한 데이터만 select해주면 된다.
select
E.employee_id,
E.name,
managed.reports_count,
managed.average_age
from Employees E inner join
(
select
reports_to,
count(reports_to) reports_count ,
round(avg(age)) average_age
from Employees
where reports_to is not null
group by reports_to
) managed on E.employee_id = managed.reports_to
order by E.employee_id
마지막으로 employee_id를 기준으로 정렬해주면 완료!
'코딩일기' 카테고리의 다른 글
알고리즘 코드카타 107 - 큰 수 만들기 (0) | 2024.07.04 |
---|---|
알고리즘 코트카타 - 11 ~ 15 (자바스크립트) (1) | 2024.07.03 |
알고리즘 코드카타 106 - 택배상자 (1) | 2024.07.03 |
알고리즘 코트카타 - 6 ~ 10 (자바스크립트) (0) | 2024.07.02 |
SQL 코드카타 105 - Customers Who Bought All Products (0) | 2024.07.02 |