SQL

HackerRank_SQL_Top Eearners

응엉잉 2023. 1. 11. 14:27

https://www.hackerrank.com/challenges/earnings-of-employees/problem?h_r=internal-search 

 

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

가장 높은 연봉과 가장 높은 연봉을 받는 사람 수를 출력하는 문제

 

<<내 풀이>>

SELECT MAX(salary * months), COUNT(*)
FROM employee
WHERE salary * months = (SELECT MAX(salary * months) FROM employee)

earning 열을 추가해주는게 가장 직관적이긴 하지만 아직 그렇게 하는 방법을 모른다 ..

그래서 우선 가장 높은 연봉을 구해야겠다고 생각했다

가장 높은 연봉을 구하고, 그 조건에 맞는 row 수를 count 하면 되겠다 싶었다

그래서 가장 높은 연봉을 구하기 위해 SELECT MAX(salary * months) FRPM employee 를 썼다

이제 가장 높은 연봉을 받는 사람 수와 함께 출력해야 하므로 가장 높은 연봉을 WHERE절의 서브쿼리로 사용했다

높은 연봉값은 동일할테니까 SELECT MAX(salary * months) 를 해줬고, row수를 COUNT(*)를 이용해 세주었다

서브쿼리를 제대로 배우면 푸는 속도가 더 빨라질것같다

 

<<강의 풀이>>

/*
1. earnings 만들어주기
2. 각 earning 별로 몇명이 그만큼 벌었는지 계산 (GROUP BY) ex. 5000 1 / 3000 2 ... 
3. earning 중에 가장 큰 값 (ORDER BY, LIMIT)
*/

SELECT salary * months AS earnings
    , COUNT(*) -- SELECT 된 행의 전체 개수
FROM employee
GROUP BY earnings
ORDER BY earnings DESC
LIMIT 1

SELECT 문에 earning을 만들어서 출력에 새로운 열을 만들어주는 방식

earning 정보를 GROUP BY를 이용해서 정리해주고

ORDER BY로 정렬 후 LIMIT 만 이용해서 원하는 정보를 출력함