문제는 아래 내용을 참고 바란다.
문제 출처 : https://www.hackerrank.com/challenges/the-company/problem
풀이 매크로
1. 예시와 문제를 보고 어떻게 풀이할 것인지 고민 : 출력해야할 SELECT 문/ SAMPLE OUTPUT 이 나오는 과정
> company_code와 founder를 GROUP BY로 하고 리드 매니저 총 수 , 시니어 매니저 총 수 , 매니저 총 수 , 직원 총 수를 구해야 하며, 중복 값이 있으므로 COUNT 전에 DISTINCT를 해줘야 겠구나
2. 여러 테이블들 존재 > 어떻게 JOIN 할 것인가?
*A INNER JOIN B : JOIN 하려는 변수의 값을 테이블 둘다 가지고 있을 때 활용.
*A LEFT JOIN B : JOIN 하려는 변수의 값에 대한 A 테이블의 정보가 B 테이블 정보보다 많을 경우에 활용
> A가 매니저 테이블이고 B가 직원테이블일때, 직원이 없는 매니저도 있을 것이므로 LEFT JOIN을 사용해야 한다.
3. 정렬은 어떻게 하는가?
> company_code기준으로 오름차순 정렬
완성 코드
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 AS c
LEFT JOIN Lead_Manager AS LM ON c.company_code = LM.company_code
LEFT JOIN Senior_Manager AS SM ON LM.lead_manager_code = SM.lead_manager_code
LEFT JOIN Manager AS M ON SM.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
배운 점
1. LEFT JOIN과 INNER JOIN을 어떻게 활용해야 하는가?
2. LEFT JOIN 시, 하나의 테이블에 여러 테이블을 교차로 붙일 수 있음
3. COUNT안에 DISTINCT를 넣으면 중복값을 제거한 값들에 대한 수를 셀 수 있음
'SQL > 코딩테스트' 카테고리의 다른 글
[MySQL] TRUNCATE와 WHERE 조건 범위 (0) | 2024.11.08 |
---|---|
[MySQL] SUBSTR/REGEXP/LEFT/RIGHT 문자열 다루기 (1) | 2024.11.08 |
[MySQL] 대칭 쌍 문제(Symmetric Pairs) (0) | 2024.11.06 |
[MySQL] Self join을 활용한 코딩테스트 주의사항 (0) | 2024.11.05 |
[MySQL] Self Join (0) | 2024.11.05 |