[SQL.#106]The Number of Employees Which Report to Each Employee

Gi Woon Lee·2024년 8월 15일

SQL

목록 보기
4/33

106번.The Number of Employees Which Report to Each Employee

문제 개요

  • 문제:
    한 명 이상에게 보고 받는 매니저의 employee_id, name, reports_count(보고자 수), average_age(보고자의 평균 나이)를 구하여라.
  • 조건:
    출력 시 employee_id 오름차순 정렬.
    평균 나이는 반올림하여 정수만 출력.

셀프조인을 생각하지 못하고 group by, having, count로만 푸는 과정에서 시간을 매우 많이 낭비했다.

단일 테이블 계층문제는 self-join을 통해 필터링한 뒤에 연산하는게 가장 쉽다

쿼리 순서

  1. SELF-JOIN 을 통해 계층 분석을 준비한다. ON절에서 reports_to = employee_id 를 통해 보고자를 한 명 이상 갖는 employee 즉, 매니저들의 정보만 조회한다.

  2. group by와 집계함수를 통해 매니저별 보고자 정보를 조회한다.

  3. order by 조건을 만족하는 테이블을 조회한다.

select A.employee_id employee_id,
       A.name name,
       count(B.name) reports_count,
       round(avg(B.age)) average_age
from employees A join employees B
on A.employee_id = B.reports_to
group by A.employee_id
order by employee_id

한마디

기억하자. 단일 테이블 계층문제 시 SELF-JOIN을 사용하면 ON 절 필터링까지 사용하여 문제를 간단하게 풀어낼 수 있다.

0개의 댓글