윈도우 함수로 그룹별 순위 매기기

RANK() OVER (PARTITION BY col ORDER BY val DESC)

GROUP BY 없이 원본 행을 유지한 채 그룹별 순위/누적값 계산

ROW_NUMBER, RANK, DENSE_RANK는 동점 처리 방식이 다르다.

SELECT
  genre,
  song,
  play_count,
  RANK() OVER (PARTITION BY genre ORDER BY play_count DESC) AS rnk
FROM songs;

PARTITION BY 기준으로 그룹이 나뉘고, 그룹 안에서만 순위가 다시 매겨진다.