반응형
*MySQL 버전, advanced select 문제입니다.
해커랭크 New Companies 문제, 샘플, 설명
💡 회사코드, 창립자명, 리드 매니저 총 인원, 시니어 매니저 총 인원, 매니저 총 인원, 총 직원(employee) 수 구하기
- 리드 매니저 = LM, 시니어 매니저 = SM, 매니저 = M, 직원 E
💡 회사코드 오름차순 정렬
💡 유의점
- 중복 레코드 존재 가능
- 회사코드 컬럼은 string 타입(문자형). 즉, 숫자로 분류 불가하므로 정렬 시 유의
테이블은 총 5개이다.
- Company, Lead_Manager, Senior_Manager, Manager, Employee
- 모든 테이블의 컬럼은 String 타입
- company_code가 공통키인 듯하다.
해커랭크 New Companies 답
- 스칼라 서브쿼리
스칼라는 결괏값이 오직 1개이다. 즉 하나만 처리하므로, 여러 개 입력하면 에러 발생한다.
회사코드, 창립자명, 리드 매니저 총 인원, 시니어 매니저 총 인원, 매니저 총 인원, 총 직원 수는 모두 하나의 값만 처리된 결과이기에 스칼라 사용 가능하다.
- 가독성 위해 별칭 사용
- 중복 데이터의 존재 가능성 때문에 DISTINCT 사용
SELECT DISTINCT c.company_code
, founder
, (SELECT COUNT(DISTINCT lead_manager_code)
FROM lead_manger l
WHERE c.company_code = l.company_code)
, (SELECT COUNT(DISTINCT senior_manager_code)
FROM senior_manger s
WHERE c.company_code = s.company_code)
, (SELECT COUNT(DISTINCT manager_code)
FROM manger m
WHERE c.company_code = m.company_code)
, (SELECT COUNT(DISTINCT employee_code)
FROM employee e
WHERE c.company_code = e.company_code)
FROM compnay c
ORDER BY 1;
추가 정리
위랑 유사하지만 서브 쿼리 안 쓴 방식
SELECT c.company_code
, founder
, COUNT(DISTINCT lead_manager_code)
, COUNT(DISTINCT senior_manager_code)
, COUNT(DISTINCT manager_code)
, COUNT(DISTINCT employee_code)
FROM compnay c, lead_manger l, senior_manger s, manger m, employee e
WHERE c.company_code = l.company_code
AND c.company_code = s.company_code
AND c.company_code = m.company_code
AND c.company_code = e.company_code
GROUP BY 1, 2
ORDER BY 1;
JOIN 방식
*추천 글 MySQL INNER JOIN(내부 조인) 다양한 문법과 예시
SELECT c.company_code
, founder
, COUNT(DISTINCT lead_manager_code)
, COUNT(DISTINCT senior_manager_code)
, COUNT(DISTINCT manager_code)
, COUNT(DISTINCT employee_code)
FROM company c
JOIN lead_manger l ON c.company_code = l.company_code
JOIN senior_manger s ON c.company_code = s.company_code
JOIN manager ON c.company_code = m.company_code
JOIN employee ON c.company_code = e.company_code
GROUP BY 1, 2
ORDER BY 1;
반응형
'SQL > HackerRank(해커랭크)' 카테고리의 다른 글
HackerRank(해커랭크) MySQL The Report 문제 답 (0) | 2023.10.27 |
---|---|
HackerRank(해커랭크) MySQL Contest Leaderboard 문제 답 (1) | 2023.10.23 |
HackerRank(해커랭크) MySQL Occupations 문제 답 (0) | 2023.10.16 |
HackerRank(해커랭크) MySQL The PADS 문제 답 (0) | 2023.10.13 |
HackerRank(해커랭크) MySQL Type of Triangle 문제 답 (1) | 2023.10.11 |