[hackerrank] New Companies

yenpkr·2025년 4월 25일

sql

목록 보기
87/91

문제

회사 코드, 설립자 이름, 리드 매니저 총 수, 시니어 매니저 총 수, 관리자 총 수, 그리고 직원 총 수를 출력하는 쿼리를 작성하세요.
회사 코드의 오름차순으로 정렬하세요 .

정답

select a.company_code, a.founder, count(distinct b.lead_manager_code), count(distinct c.senior_manager_code), count(distinct d.manager_code), count(distinct e.employee_code)
from company a
join lead_manager b on a.company_code = b.company_code
join senior_manager c on a.company_code = c.company_code
join manager d on a.company_code = d.company_code
join employee e on a.company_code = e.company_code
group by a.company_code,a.founder
order by 1 asc

🚨 error

select a.company_code, a.founder, count(e.lead_manager_code), count(e.senior_manager_code), count(e.manager_code), count(e.employee_code)
from company a
join employee e on a.company_code = e.company_code
group by a.company_code,a.founder
order by 1 asc

employee 테이블에 company_code, founder, lead_manager_code, senior_manager_code, manager_code, manager_code 컬럼이 모두 있어서 employee 테이블만 조인했다.
이렇게 했더니 카운트가 동일한 카운트로 되면서 틀렸다.

이유를 생각해보니,
예를 들어 밑 사진과 같이 employee 테이블에는 SM2 데이터가 없지만, Senior_Manager 테이블에는 SM2 데이터가 존재한다.
따라서 employee 테이블의 데이터로만 카운트 하는 것이 아니라, 각각의 테이블을 모두 조인해서 카운트해주어야 한다.

0개의 댓글