코딩 테스트/MySQL

[HackerRank] New Companies

알밤바 2025. 7. 22. 12:00
728x90
반응형
 

New Companies | HackerRank

Find total number of employees.

www.hackerrank.com


문제

 

 

문제 접근 방식

회사코드와 창립자, 그리고 각 회사 별 lead_manager, senior_manager, manager, employee의 수를 조회하는 문제이다.

테이블들을 잘 살펴보면, Employee 테이블에 company_code부터 조회해야 하는 데이터를 다 가지고 있다.

Employee 테이블에서 창립자 데이터만 들고오면 되기에 Company 테이블과 조인하면 끝!

 

SELECT A1.COMPANY_CODE
     , A1.FOUNDER
     , COUNT(DISTINCT A2.LEAD_MANAGER_CODE)
     , COUNT(DISTINCT A2.SENIOR_MANAGER_CODE)
     , COUNT(DISTINCT A2.MANAGER_CODE)
     , COUNT(DISTINCT A2.EMPLOYEE_CODE)
FROM Company A1
LEFT JOIN Employee A2
    ON A1.COMPANY_CODE = A2.COMPANY_CODE
GROUP BY A1.COMPANY_CODE, A1.FOUNDER
ORDER BY A1.COMPANY_CODE
;

 

 

만약, Employee 테이블에 원하는 데이터가 없을 경우에는 주어진 테이블들을 아래와 같이 하나씩 조인해서 조회해도 됨

SELECT A1.COMPANY_CODE
     , A1.FOUNDER
     , COUNT(DISTINCT A2.LEAD_MANAGER_CODE)
     , COUNT(DISTINCT A3.SENIOR_MANAGER_CODE)
     , COUNT(DISTINCT A4.MANAGER_CODE)
     , COUNT(DISTINCT A5.EMPLOYEE_CODE)
FROM Company A1
LEFT JOIN Lead_Manager A2 
    ON A1.COMPANY_CODE = A2.COMPANY_CODE
LEFT JOIN Senior_Manager A3
    ON A1.COMPANY_CODE = A3.COMPANY_CODE
    AND A2.LEAD_MANAGER_CODE = A3.LEAD_MANAGER_CODE
LEFT JOIN Manager A4
    ON A1.COMPANY_CODE = A4.COMPANY_CODE
    AND A2.LEAD_MANAGER_CODE = A4.LEAD_MANAGER_CODE
    AND A3.SENIOR_MANAGER_CODE = A4.SENIOR_MANAGER_CODE
LEFT JOIN Employee A5
    ON A1.COMPANY_CODE = A5.COMPANY_CODE
    AND A2.LEAD_MANAGER_CODE = A5.LEAD_MANAGER_CODE
    AND A3.SENIOR_MANAGER_CODE = A5.SENIOR_MANAGER_CODE
    AND A4.MANAGER_CODE = A5.MANAGER_CODE
GROUP BY A1.COMPANY_CODE, A1.FOUNDER
ORDER BY A1.COMPANY_CODE
;
728x90
반응형