본문 바로가기
SQL/MySQL

[MySQL] HackerRank - New Companies 문제 풀이

by 취준생 져니 2025. 3. 12.

문제 사이트

아래 문제는 해커랭크에서 추출해온 문제입니다. 문제의 저작권은 해커랭크에 있으며 문제를 풀어보시려면 아래 링크를 클릭해주세요 🙂


 

New Companies | HackerRank

Find total number of employees.

www.hackerrank.com

 

 


 

 

 

👉문제 설명

  • company_code, founder name, lead managers 의 수, senior managers 의 수, managers 의 수, employees 의 수를 구하는 쿼리문을 작성하라
  • company_code 오름차순으로 정렬
  • 테이블에는 중복된 행이 있을 수 있음

 

 

  • Company 테이블

 

 

 

 

  • Lead_Manager 테이블

 

 

 

 

  • Senior_Manager 테이블

 

 

 

 

 

  • Manager 테이블

 

 

 

 

 

 

  • Employee 테이블

 

 

 

 

 

 

 

 

👉문제 풀이 과정

1. select문에서 ~ 의 수를 계산하려면?

-> Group by 필요, JOIN, COUNT 필요

2. 테이블 중복된 행 처리 -> DISTINCT 함수 사용

3. company_code로 오름차순 정렬

 

 

 

👉최종 답안 

1. select문에서 ~ 의 수를 계산하려면? -> GROUP BY, JOIN, COUNT 활용 

2. 테이블 중복된 행 처리 -> DISTINCT 사용

3. company_code로 오름차순 정렬

select c.company_code, 
        c.founder as founder_name, 
        count(distinct l.lead_manager_code) as total_lead_managers,
        count(distinct s.senior_manager_code) as total_senior_managers,
        count(distinct m.manager_code) as total_managers,
        count(distinct e.employee_code) as total_employees
from Company as c 
left join Lead_Manager as l on c.company_code = l.company_code
left join Senior_Manager as s on l.lead_manager_code = s.lead_manager_code
left join Manager as m on s.senior_manager_code = m.senior_manager_code
left join Employee as e on m.manager_code = e.manager_code
group by c.company_code, c.founder
order by c.company_code

 

중복된 값을 없애기 위해 distinct를 사용해줬고

기준 테이블(여기서는 Company)의 모든 행을 포함하고, 일치하는 값이 없는 경우 NULL로 표시되어야 하므로 LEFT JOIN 사용

 

 

LEFT JOIN

- 왼쪽 테이블을 기준으로 다른 테이블들을 합친다.

- 해당 문제에서는 company_code에 따른 lead_manager의 수, senior_manager의 수, ... 를 구해야 하므로 company 테이블을 기준으로 join 해준다.