반응형
Notice
Recent Posts
Recent Comments
Link
개발은 처음이라 개발새발
Top Earners 서브쿼리 퀴즈 [해커랭크] 본문
반응형
https://www.hackerrank.com/challenges/earnings-of-employees/problem?h_r=internal-search
이번에는 해커랭크의 서브쿼리 퀴즈를 풀어보겠습니다. 문제는 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 |