해당 문제는 HackerRank에서 사용한 문제이며 모든 테이블의 자료와 출처는 Hackerank임을 밝힙니다.
해당 글에서는 Group by를 사용하여 푸는 문제로 그래도 처음 푸는 사람에게는 난이도가 있는 문제인 것 같습니다.
해당 문제 원본을 확인 하시려면 해당 사이트를 들어가시면 될 것 같습니다.
시작하겠습니다
We define an employee's total earnings to be their monthly salary * months 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 2 space-separated integers.
(우리는 직원의 총 수입을 월 급여 * 근무 개월로 정의하고, 최대 총 수입을 직원 표에 있는 모든 직원의 최대 총 수입으로 정의합니다. 쿼리를 작성하여 모든 직원의 최대 총 수입과 최대 총 수입을 가진 직원의 총 수를 구합니다. 그런 다음 이 값을 공간으로 구분된 2개의 정수로 출력합니다.)
문제를 요약하자면 총 수입을 구합니다. 이제 총 수입 중 가장 큰 값과 최대 총 수입을 가진 사람이 몇 명인지를 뽑아내라는 문제입니다.
이제 문제를 좀 더 시각화해서 봐보겠습니다. 기존 테이블 확인 해보겠습니다.
1. 이제 여기서 총 수입을 테이블에 추가해보겠습니다.
이러한 형태의 테이블로 만들면 될 것 같습니다!! 그러므로 as(별칭)를 사용하면 훨씬 편할 것 같습니다.
2. 이제 추가된 earnings(총 수입) 컬럼이 확인 되었으니, 이러한 형식(예 : 29520 5)으로 출력 해야하니 group by를 통해 출력을 해보겠습니다.
select months * salary as earnings,
count(*)
from Employee
group by earnings
이렇게 하면 문제에서 원하는 형태의 출력이 나옵니다. 이제 제일 큰 값만 가져오면 됩니다.
3. 큰 값을 가져오기 위해 DESC(내림차순)과 하나만 가져오기 위해 LIMIT 사용해보겠습니다.
select months * salary as earnings,
count(*)
from Employee
group by earnings
order by earnings DESC
LIMIT 1
이와 같이 earnings를 기준으로 제일 큰 값을 맨 위에 올린 후 LIMIT 1을 통해 맨 위의 하나의 값만 가져오게 되면 문제를 풀 수 있게 됩니다.
이상으로 Hacker Rank 문제 풀이를 마치도록 하겠습니다.
728x90
'Data Analyst > SQL' 카테고리의 다른 글
[SQL] INNER JOIN 사용하여 문제 풀기 (Type of Triangle) (0) | 2024.10.11 |
---|---|
[SQL] CASE 사용하여 문제 풀기 (Type of Triangle) (0) | 2024.10.10 |
SQL - Window Function (RANK, DENSE_RANK, LAG, LEAD) (1) | 2024.09.25 |
SQL - Window Functions (ROW_NUMBER) (0) | 2024.09.20 |
SQL - Index, Case Statement (1) | 2024.09.17 |