coding/sql 코딩테스트
[solvesql] 게임 개발사의 주력 플랫폼 찾기
임이레
2025. 1. 13. 15:17
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