문제
Amber's conglomerate corporation just acquired some new companies. Each of the companies follows this hierarchy:
<그림참고>
Given the table schemas below, write a query to print the company_code, founder name, total number of lead managers, total number of senior managers, total number of managers, and total number of employees. Order your output by ascending company_code.
Note:
- The tables may contain duplicate records.
- The company_code is string, so the sorting should not be numeric. For example, if the company_codes are C_1, C_2, and C_10, then the ascending company_codes will be C_1, C_10, and C_2.
해석
Amber의 대기업이 여러 회사를 인수했으며, 각 회사는 특정한 조직 계층 구조(hierarchy)를 따르고 있음.
요구 사항
주어진 테이블을 이용하여 각 회사별로 다음 정보를 출력하는 SQL 쿼리를 작성해야 함:
- company_code (회사 코드)
- founder (회사의 창립자 이름)
- lead managers의 총 수
- senior managers의 총 수
- managers의 총 수
- employees의 총 수
➡ 출력 결과는 company_code 기준으로 알파벳순 정렬해야 함.
➡ company_code가 숫자가 아닌 문자열이므로, 정렬할 때 C_1, C_10, C_2가 아니라 C_1, C_2, C_10 순서여야 함.
정답
처음 쿼리
select distinct c.company_code, c.Founder, count(distinct l.lead_manager_code), count(distinct s.senior_manager_code), count(distinct e.employee_code)
from Company c
join Lead_Manager l using(company_code)
join Senior_Manager s using(company_code)
join Manager m using(company_code)
join Employee e using(company_code)
group by c.company_code, c.Founder
order by 1;
처음에 문제 풀때 모든 테이블에 join을 걸음
중복될 가능성이 있음
서브쿼리를 활용해서 풀어보기로 함
SELECT c.company_code,
c.founder,
(SELECT COUNT(DISTINCT l.lead_manager_code) FROM Lead_Manager l WHERE l.company_code = c.company_code) AS total_lead_managers,
(SELECT COUNT(DISTINCT s.senior_manager_code) FROM Senior_Manager s WHERE s.company_code = c.company_code) AS total_senior_managers,
(SELECT COUNT(DISTINCT m.manager_code) FROM Manager m WHERE m.company_code = c.company_code) AS total_managers,
(SELECT COUNT(DISTINCT e.employee_code) FROM Employee e WHERE e.company_code = c.company_code) AS total_employees
FROM Company c
ORDER BY 1;
배운 점
- join을 복합으로 사용하면 성능면에서도 그렇고 중복으로 데이터가 겹치기에 좋은 판단이 아니다
- 이럴 경우 서브쿼리를 적극 활용하자
- where from 테이블과 서브쿼리의 code가 같다는 조건을 걸어서 진행하면 좋다.
'일일 문제 풀이 > HackerRank' 카테고리의 다른 글
[SQL] 해커랭크 HakerRank 문제 풀이 Symmetric Pairs (0) | 2025.03.17 |
---|---|
[SQL] 해커랭크 HackerRank Placements 문제 풀이 (0) | 2025.03.16 |
[SQL] 해커랭크 HackerRank Binary Tree Nodes 문제 풀이 (0) | 2025.03.14 |
[SQL] 해커랭크 HackerRank Occupations 문제 풀이 (0) | 2025.03.13 |
[SQL] 해커랭크 HackerRank The PADS 문제 풀이 (0) | 2025.03.12 |