개발은 처음이라 개발새발

Top Earners 서브쿼리 퀴즈 [해커랭크] 본문

mysql

Top Earners 서브쿼리 퀴즈 [해커랭크]

leon_choi 2023. 6. 6. 18:25
반응형

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

이번에는 해커랭크의 서브쿼리 퀴즈를 풀어보겠습니다. 문제는 employee라는 테이블이 있고 그안에 아이디와, 이름, 개월수, salary의 컬럼으로 형성돼 있는데요. 문제는 개월수(months)와 salary를 곱한 값이 최대 몇이고 이 최대수치를 기록한 row가 몇개인지 알아보는 것입니다. 우선 제일 먼저 해봐야 할 것은 months와 salary를 곱한 값이 가장 높은 로우부터 찾아야 겠죠?

SELECT *
FROM employee
WHERE months * salary = (SELECT MAX(months*salary) FROM employee)
__________________________________________________________________
output:
50664 Anthony 22 4912 
98493 Nancy 22 4912 
98495 Patricia 22 4912 
98497 Angela 22 4912 
98499 Gregory 22 4912 
99491 Lillian 22 4912 
99493 Evelyn 22 4912

네 이렇게 높은 로우들을 찾았지만 이게 정답이 아닙니다. 우리가 필요한 건 가장 높은 금액과 몇명이나 이렇게 받았는지가 궁금한 건데요. 이렇게 도출하기 위해서는 GROUP BY 를 활용해야 합니다. 

SELECT (months * salary) AS earnings, COUNT(*)
FROM employee
WHERE months * salary = (SELECT MAX(months*salary) FROM employee)
GROUP BY earnings
____________________________________________________________________
output:
108064 7

#########번외
SELECT (months * salary) AS earnings, COUNT(*)
FROM employee
GROUP BY earnings
HAVING earnings = (SELECT MAX(months*salary) FROM employee)

네 이렇게 where절에 서브쿼리를 넣어 문제를 풀어봤는데요. 번외로 where 대신에 Having 절에 서브쿼리를 적용해서 정답을 뽑아낼수도 있습니다. where절과 다른점은 where에는 별칭을 사용할 수 없지만 having절에서는 별칭을 사용할 수 있습니다. 

반응형

'mysql' 카테고리의 다른 글

MySQL WITH문 활용[해커랭크]  (0) 2023.06.11
JOIN 서브쿼리 퀴즈[LeetCode]  (0) 2023.06.07
서브쿼리 간단정리  (0) 2023.05.31
서브쿼리를 활용한 DELETE [LeetCode]  (0) 2023.05.30
UPDATE 와 CASE를 활용한 퀴즈[LeetCode]  (0) 2023.05.29