문제 사이트
아래 문제는 해커랭크에서 추출해온 문제입니다. 문제의 저작권은 해커랭크에 있으며 문제를 풀어보시려면 아래 링크를 클릭해주세요 🙂
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 해준다.
'SQL > MySQL' 카테고리의 다른 글
[MySQL] HackerRank - Weather Observation Station 20 문제 풀이 (0) | 2025.03.19 |
---|---|
[MySQL] HackerRank - Top Competitors 문제 풀이 (0) | 2025.03.13 |
[MySQL] HackerRank - Weather Observation Station 8 문제 풀이 (0) | 2025.02.10 |
[MySQL] HackerRank - Weather Observation Station 7 문제 풀이 (0) | 2025.02.06 |
[MySQL] HackerRank - Weather Observation Station 6 문제 풀이 (0) | 2025.01.31 |