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