본문 바로가기
언어 & 라이브러리/SQL

해커랭크 HackerRank New Companies Advanced Select

by illlilillil 2022. 1. 19.

문제 설명

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.

1. company_code, founder name, total number of lead managers, total number of senior managers, total number of managers, and total number of employees

를 select해야 됩니다.2. company_code에 따라 정렬을 수행해야 합니다.3. distinct로 중복 컬럼이 없게 해야 합니다.4. company_code가 string으로 되어 있어 숫자 타입으로 정렬하지 않아도 됩니다.

Sample Output
C1 Monika 1 2 1 2
C2 Samantha 1 1 2 2

문제 풀이

회사 조직의 상하 관계에 맞춰 Left join을 맞춰주고 group by에 없는 어트리뷰트는 count 함수로 세줄 수 있다.

그러나 Distinct로 중복되지 않게 집계해야한다.

SELECT C.company_code
       , C.founder
       , COUNT(DISTINCT(L.lead_manager_code))
       , COUNT(DISTINCT(S.senior_manager_code))
       , COUNT(DISTINCT(M.manager_code))
       , COUNT(DISTINCT(E.employee_code))  
FROM Company C
LEFT JOIN Lead_Manager L 
    ON C.company_code = L.company_code
LEFT JOIN Senior_Manager S 
    ON L.lead_manager_code = S.lead_manager_code
LEFT JOIN Manager M 
    ON S.senior_manager_code = M.senior_manager_code
LEFT JOIN Employee E 
    ON M.manager_code = E.manager_code
Group by C.company_code, C.founder
ORDER BY C.company_code

 

댓글