728x90
반응형
해커 랭크 - https://www.hackerrank.com/
Prepare > SQL > Advanced Select > New Companies
Amber의 다각화된 기업이 새로운 회사들을 인수했습니다. 각 회사는 다음과 같은 계층 구조를 따릅니다.
아래의 테이블 스키마를 고려하여 company_code, 창업자 이름, 총 리드 매니저 수 총 시니어 매니저 수, 총 매니저 수, 총 직원수를 출력하는 쿼리를 작성하세요. company_code 기준으로 오름차순으로 출력되어야 합니다.
Note
- 테이블에 중복된 레코드가 있을 수 있습니다.
- 회사 코드는 문자열 형태이므로 숫자로 정렬해서는 안됩니다. 예를 들어, 회사코드가 C_1, C_2, C_10인 경우, 오름차순으로 정렬된 회사 코드는 C_1, C_10, C_2가 됩니다.
Input Format
다음 테이블에는 회사 데이터가 포함되어 있습니다.
- Company : company_code는 회사의 코드, founder는 회사의 창업자입니다.
- Lead_Manager : lead_manager_code는 리드 매니저의 코드, company_code는 근무 회사 코드입니다.
- Senior_Manager : senior_manager_code는 시니어 매니저의 코드, lead_manager_code는 시니어 매니저의 리드 매니저의 코드, company_code는 근무 회사 코드입니다.
- Manager : manager_code는 매니저 코드, senior_manager_code는 매니저의 시니어 매니저의 코드, lead_manager_code는 시니어 매니저의 리드 매니저 코드, company_code는 근무 회사 코드입니다.
- Employee : employee_code는 직원 코드, manager_code는 직원의 매니저의 코드, senior_manager_code는 매니저의 시니어 매니저 코드, leade_manager_code는 시니어 매니저의 리드 매니저 코드, company_code는 근무 회사 코드입니다.
Sample Input
- Company Table
- Lead_Manager Table
- Senior_Manager Table
- Manager Table
- Employee Table
Sample Output
C1 Monika 1 2 1 2
C2 Samantha 1 1 2 2
Explanation
회사 C1에서 유일한 리드 매니저는 LM1입니다. LM1 아래에는 두 명의 시니어 매니저인 SM1과 SM2가 있습니다. SM1 아래에는 한 명의 매니저인 M1이 있습니다. M1 아래에는 두 명의 직원인 E1과 E2가 있습니다.
회사 C2에서 유일한 리드 매니저는 LM2입니다. LM2 아래에는 한 명의 시니어 매니저인 SM3이 있습니다. SM3 아래에는 두 명의 매니저인 M2와 M3이 있습니다. M2 아래에는 한 명의 직원인 E3가 있고, M3 아래에는 다른 한 명의 직원인 E4가 있습니다.
반응형
MySQL
SELECT C.company_code,
C.founder,
COUNT(DISTINCT lead_manager_code),
COUNT(DISTINCT senior_manager_code),
COUNT(DISTINCT manager_code),
COUNT(DISTINCT employee_code)
FROM Employee E
LEFT JOIN Company C
ON E.company_code = C.company_code
GROUP BY C.company_code, C.founder
ORDER BY C.company_code ASC;
Oracle
SELECT C.company_code,
C.founder,
COUNT(DISTINCT lead_manager_code),
COUNT(DISTINCT senior_manager_code),
COUNT(DISTINCT manager_code),
COUNT(DISTINCT employee_code)
FROM Employee E
LEFT JOIN Company C
ON E.company_code = C.company_code
GROUP BY C.company_code, C.founder
ORDER BY C.company_code ASC;
MS SQL Server
SELECT C.company_code,
C.founder,
COUNT(DISTINCT lead_manager_code),
COUNT(DISTINCT senior_manager_code),
COUNT(DISTINCT manager_code),
COUNT(DISTINCT employee_code)
FROM Employee E
LEFT JOIN Company C
ON E.company_code = C.company_code
GROUP BY C.company_code, C.founder
ORDER BY C.company_code ASC;
- 모든 테이블을 다 JOIN 하려 했으나, Employee 테이블 구조 상 이미 다른 테이블의 정보가 다 포함되어 있다고 판단하여 Employee 테이블을 기준으로 쿼리 작성함.
- LEFT JOIN
- SQL에서 사용되는 조인(Join)의 유형 중 하나.
- 왼쪽 테이블을 기준으로 오른쪽 테이블과 매칭하여 데이터를 가져온다.
- 왼쪽 테이블에 있는 값이 오른쪽 테이블과 매칭되는 값이 없을 경우 NULL 반환.
- ON 절로 두 테이블을 연결할 때 사용되는 조인 조건 지정.
SELECT colName
FROM myTable01 /* 왼쪽 테이블 */
LEFT JOIN myTable02 /* 오른쪽 테이블 */
ON myTable01.colName = myTable02.colName;
개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.
728x90
반응형
'> 개발-IT-인터넷 > > SQL' 카테고리의 다른 글
[해커랭크(HackerRank) SQL 풀이] - Revising Aggregations - The Sum Function (1) | 2024.01.05 |
---|---|
[해커랭크(HackerRank) SQL 풀이] - Revising Aggregations - The Count Function (0) | 2024.01.04 |
[해커랭크(HackerRank) SQL 풀이] - Binary Tree Nodes (1) | 2023.12.20 |
[해커랭크(HackerRank) SQL 풀이] - Occupations (0) | 2023.12.12 |
[해커랭크(HackerRank) SQL 풀이] - The PADS (2) | 2023.12.07 |