728x90
반응형
문제링크
https://www.hackerrank.com/challenges/earnings-of-employees/problem?isFullScreen=true
1. 핵심
- total_earning을 계산 > total_earning 기준 group by > total_earning 기준 내림차순 정렬 > limit 1을 활용해 가장 큰 total_earning 추출 > count(*)를 통해서 가장 큰 total_earning의 수를 센다.
- GROUP BY의 주의점: GROUP BY에서 정의된 컬럼만 SELECT절에 사용가능하다.
ORDER BY의 주의점: ORDEY BY는 Alias 알지 못한다. 따라서 정렬하고자하는 컬러명의 원래 이름과 형태를 사용해야한다.- 윈도우 함수 사용
- row_number() over ( partition by 그룹핑할 컬럼 order by 정렬할 컬럼)
2. 코드(MySQL)
select months * salary as total_earning, count(*)
from Employee
group by total_earning
order by months * salary desc
limit 1;
-- 1. total_earning을 계산 > 2. total_earning 기준으로 group by로 묶음 >
-- 3. total_earning(months * salary)로 내림차순 정렬 > 4. limit 1로 가장 높은 total_eraning만 추출
-- 집계함수 count를 통해서 같은 total_earning의 수 추출한다.
-- 주의할 점은 order by는 alias 못쓴다. 따라서 원래 명칭을 사용해야함.
-- group by에서 정의된 컬렁명만 쓸 수 있고 나머지는 반드시 집계함수가 와야한다.
-- 윈도우함수 row_number() 사용해서 가장 큰 total_earning 찾기
with tmp as (
select months * salary as total_earning,
row_number() over (order by months * salary desc) as rs
from Employee
)
select total_earning, rs
from tmp
where rs = 1;
728x90
반응형
'PS > SQL' 카테고리의 다른 글
[프로그래머스] 특정 형질을 가지는 대장균 찾기 (0) | 2024.04.30 |
---|---|
[HackerRank] Weather Observation Station 13 (0) | 2024.04.24 |
[HackerRank] The Blunder (0) | 2024.04.23 |
[HackerRank] Type of Triangle (0) | 2024.04.10 |
[HackerRank] Higher Than 75 Marks (0) | 2024.04.08 |