해커랭크 SQL 문제 풀이: Top Earners
HackerRank에서 MySQL 기준으로 문제를 풀었습니다. 아래는 문제에 사용되는 테이블 예시입니다.
employee_id | name | months | salary
------------|----------|--------|-------
12228 | Rose | 15 | 1968
33645 | Angela | 1 | 3443
45692 | Frank | 17 | 1608
56118 | Patrick | 7 | 1345
59725 | Lisa | 11 | 2330
74197 | Kimberly | 16 | 4372
문제링크: https://www.hackerrank.com/challenges/earnings-of-employees/problem
We define an employee's total earnings to be their monthly worked, and the maximum total earnings to be the maximum total earnings for any employee in the Employee table. Write a query to find the maximum total earnings for all employees as well as the total number of employees who have maximum total earnings. Then print these values as space-separated integers.
이 문제에서 직원별 근무 개월 수(months)와 월급 데이터(salary)를 제공하는데요. 여기서 총소득(total earnings)은 근무 개월 수 x 월급으로 계산합니다. 이때 모든 직원 중 1) 가장 높은 소득 값과 그 2) 최고 소득을 번 직원의 수를 함께 출력하는 문제입니다.
따라서, 쿼리를 작성할 때도 이와 같은 순서로 접근하는 것이 좋습니다.
1. 직원별 총 소득 계산 후 최대값 구하기
2. 최고 소득을 번 직원 수 구하기
3. 1, 2번 값을 함께 출력하기
Top Earners 정답: Subquery 활용
이 문제도 역시 다양한 방법으로 풀 수 있는데요. 저는 WHERE 절에서 서브쿼리를 이용하는 방식으로 풀어보겠습니다.
WHERE 절 서브쿼리 활용 문제 풀이
1. 직원별 총 소득 계산 후 최대값 구하기
SELECT MAX(salary * months) as max_total_earnings
FROM employee;
salary와 months의 곱으로 총 소득(total earnings)을 구하고 MAX 함수를 활용해 최대값을 찾아줍니다.
2. 최고 소득을 번 직원 수 구하기
SELECT COUNT(*) FROM employee
WHERE salary * months = (SELECT MAX(salary * months) FROM employee)
위에서 작성한 최고 소득(max_total_earnings)을 구하는 서브쿼리를 WHERE 절에 넣었습니다. 이때 서브쿼리는 하나의 값을 반환하므로 단일값(스칼라) 서브쿼리가 되겠습니다. 이 쿼리를 통해 직원 중 총 소득이 최고 소득과 같은 직원의 수를 구할 수 있겠죠
3. 1, 2번 값을 같이 출력하기
SELECT MAX(salary * months) AS max_total_earnings, COUNT(*) FROM employee
WHERE salary * months = (SELECT MAX(salary * months) FROM employee)
위와 같이 같이 출력할 수 있습니다.
'데이터 분석 > SQL' 카테고리의 다른 글
[SQL] 프로그래머스 풀이 - 우유와 요거트가 담긴 장바구니 (4가지 풀이) (0) | 2024.05.26 |
---|---|
[SQL] HackerRank Binary Tree Nodes - CASE 구문 활용 (NOT IN이 안되는 이유) (0) | 2024.05.24 |
[SQL] HackerRank The Blunder - CAST, CEIL 활용 (0) | 2024.05.22 |
[SQL] HackerRank Weather Observation Station 10, 11, 12 - 정규표현식 활용 (0) | 2024.05.21 |
[SQL] HackerRank Weather Observation Station 6, 7, 8, 9 - 정규표현식 활용 (0) | 2024.05.21 |