각 파티션 내에 비교할 수 있는 여러 행이 있어야 한다.
PARTITION BY 와 GROUP BY가 완전히 같으면 각 파티션에 1개 행만 남는다.
모든 rank가 1이 되서 무의미 하다.
예를 들면
SELECT
developer,
platform,
SUM(sales) as total_sales,
RANK() OVER (PARTITION BY developer ORDER BY SUM(sales) DESC) as platform_rank
FROM games
GROUP BY developer, platform; -- platform 추가
그룹바이에 여러행이 있어야 순위 매기기가 수월하다.
| developer | platform | total_sales | platform_rank |
|-----------|----------|-------------|---------------|
| Nintendo | Switch | 600 | 1 |
| Nintendo | 3DS | 400 | 2 |
| Sony | PS4 | 900 | 1 |
| Sony | PS3 | 600 | 2 |
1. 전체 개발사 간 순위 비교
sql
SELECT
developer,
SUM(sales) as total_sales,
RANK() OVER (ORDER BY SUM(sales) DESC) as overall_rank -- PARTITION BY 제거
FROM games
GROUP BY developer;
결과:
| developer | total_sales | overall_rank |
|-----------|-------------|--------------|
| Sony | 1500 | 1 |
| Nintendo | 1000 | 2 |
| Microsoft | 800 | 3 |
'MYSQL > 개념' 카테고리의 다른 글
코호트란? (Cohort) (0) | 2025.07.02 |
---|---|
ROWS와 RANGE() (0) | 2025.07.01 |
SQL에서 중간값 구하기 (0) | 2025.06.24 |
INSTR() (0) | 2025.06.21 |
언피펏(unpivot) (0) | 2025.06.19 |