데이터 분석/SQL

[SQL] HackerRank Top Earners - 서브쿼리(subquery) 활용

된장찌개냠냠 2024. 5. 24. 16:53
반응형

해커랭크 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

 

Top Earners | HackerRank

Find the maximum amount of money earned by any employee, as well as the number of top earners (people who have earned this amount).

www.hackerrank.com

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)

 

위와 같이 같이 출력할 수 있습니다. 

 

 

 

HackerRank 모든 문제 풀이 모음 바로가기

 

정확하고 꼼꼼하게 씁니다

마케팅, 데이터, 프로덕트, 스타트업, 일상, 유용한 정보 등에 대해 씁니다.

onemorepatty.tistory.com

모든 SQL 코딩테스트 문제 풀이 모음 바로가기

 

정확하고 꼼꼼하게 씁니다

마케팅, 데이터, 프로덕트, 스타트업, 일상, 유용한 정보 등에 대해 씁니다.

onemorepatty.tistory.com

 

반응형