본문 바로가기
MYSQL/HakerRank_Medium

New Companies

by 수스리 2025. 4. 15.

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.

앰버의 대기없은 몇몇 회사를 인수 했습니다. 각 회사는 다음과 같은 직급 채계를 가집니다. 아래에 주어진 스키마 테이블들을 참고해서 회사 코드, 설립자 이름, 총 매니저 수, 총 리드 매니저 수, 총 시니어 매니저 수, 총 매니저 수, 총 직원수를 쿼리하세요. 

참고:

테이블은 중복된 행을 열을 가질 수 있습니다.

회사코드는 문자열이어서 숫자 형태로 정렬되지 않습니다. 가령 회사코드가 C_1, C_2 그리고 C_10이면 회사코드는  

C_1, C_10,  C_2 순으로 정렬됩니다. 

SELECT
    C.company_code,
    C.founder,
    COUNT(DISTINCT LM.lead_manager_code),
    COUNT(DISTINCT SM.senior_manager_code),
    COUNT(DISTINCT M.manager_code),
    COUNT(DISTINCT E.employee_code)
FROM Company C
JOIN Lead_Manager LM ON C.company_code = LM.company_code
JOIN Senior_Manager SM ON SM.lead_manager_code = LM.lead_manager_code
JOIN Manager M ON M.senior_manager_code = SM.senior_manager_code
JOIN Employee E ON E.manager_code = M.manager_code
GROUP BY C.company_code, C.founder
ORDER BY C.company_code

처음에 모든 조인은 compay_code를 기준으로 했다. 이러면 꼬인다. 이번 관계는 계층 관계기 때문에 순서대로 조인해야 한다. 
명심하자 계층 관계는 순서대로 조인하자

 

<2025년 4월 29일 복습>

SELECT C.company_code, founder,
    COUNT(DISTINCT LM.lead_manager_code),
    COUNT(DISTINCT SM.Senior_manager_code),
    COUNT(DISTINCT M.Manager_code),
    COUNT(DISTINCT E.Employee_code)
FROM Company C
JOIN Lead_Manager LM ON LM.company_code = C.company_code
JOIN Senior_Manager SM ON SM.lead_manager_code = LM.lead_manager_code
JOIN Manager M ON M.senior_manager_code = SM.senior_manager_code
JOIN Employee E ON E.manager_code = M.manager_code
GROUP BY C.company_code, founder
ORDER BY C.company_code ASC;

쓰다보니 기존 코드가 그대로 나왔다. DISTINCT를 쓰는 이유는 조인을 하다보면 겹치는 직원이 있기 마련

'MYSQL > HakerRank_Medium' 카테고리의 다른 글

Weather Observation Station 19, 유클리드 거리 구하기  (0) 2025.04.16
Weather Observation Station 18  (0) 2025.04.15
Binary Tree Nodes  (0) 2025.04.14
The PADS  (0) 2025.04.14
Occupations 과 Pivot 테이블  (0) 2025.04.03