window function을 이용한 문제
rank, dense_rank, row_number
- RANK() : 중복 순위 개수만큼 다음 순위 값을 증가시킨다. 즉, 1위가 3개일때 1,1,1,4,5 로 순위를 매김.
- DENSE_RANK() : 중복 순위가 존재해도 순차적으로 다음 순위 값을 표시한다. 1위가 3개일 때 1,1,1,2 로 순위를 매긴다고 생각하면 된다.
- ROW_NUMBER() : index 라고 생각해도 무방하다!
문제에서는 1위가 중요하고 만약, 판매량 합계가 동일한 플랫폼이 여러 개라면 모두 출력해주세요. 라는 조건이 있기 때문에 RANK()를 사용했다.
풀이과정
with main_t as (
select developer_id
,platform_id
,sum(sales_na + sales_eu + sales_jp + sales_other) as sales
,rank() over (partition by developer_id order by sum(sales_na + sales_eu + sales_jp + sales_other) desc) as sales_rk
from games
group by 1, 2
)
select b.name as developer
,c.name as platform
,sales
from main_t a join companies b on a.developer_id = b.company_id
join platforms c on a.platform_id = c.platform_id
'coding > sql 코딩테스트' 카테고리의 다른 글
[리트코드] 196. Delete Duplicate Emails (0) | 2025.01.23 |
---|---|
[리트코드] 178. Rank Scores (0) | 2025.01.23 |
[solvesql] 게임 평점 예측하기 1 (0) | 2025.01.09 |
[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기 (0) | 2025.01.09 |
[프로그래머스] 멸종위기의 대장균 찾기 (0) | 2025.01.06 |