본문 바로가기
MYSQL/개념

윈도우함수 잘 쓰기

by 수스리 2025. 6. 27.

각 파티션 내에 비교할 수 있는 여러 행이 있어야 한다. 

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