RANK와 DENSE_RANK
RANK()
와 DENSE_RANK()
함수는 그룹 내 행들에 순위 번호를 부여합니다.
보통 진행률, 점수, 가격 등 특정 지표로 데이터를 정렬해 비교할 때 사용합니다.
이 함수들은 OVER()
절을 사용하는 윈도우 함수입니다.
문법
RANK와 DENSE_RANK 문법
SELECT user_name,
RANK() OVER (PARTITION BY course_name ORDER BY completion_rate DESC) AS rank,
DENSE_RANK() OVER (PARTITION BY course_name ORDER BY completion_rate DESC) AS dense_rank
FROM course_progress;
PARTITION BY
는 강좌별로 행을 그룹화합니다ORDER BY
는 순위를 매기는 기준을 정의합니다
예시: 강좌 완료율 순위 매기기
두 개의 강좌, SQL 기초와 파이썬 입문에 대한 학습자 진행률 데이터가 있습니다.
각 학습자는 0부터 100까지의 completion_rate
를 가지며, 강좌별로 이 값을 기준으로 순위를 매기고 싶습니다.
RANK()
와 DENSE_RANK()
를 사용해 같은 강좌 내에서 학습자 간 비교를 할 수 있습니다.
완료율로 사용자 순위 매기기
SELECT user_name,
course_name,
completion_rate,
RANK() OVER (PARTITION BY course_name ORDER BY completion_rate DESC) AS rank,
DENSE_RANK() OVER (PARTITION BY course_name ORDER BY completion_rate DESC) AS dense_rank
FROM course_progress;
출력:
user_name | course_name | completion_rate | rank | dense_rank |
---|---|---|---|---|
Heidi | Python Intro | 92 | 1 | 1 |
Frank | Python Intro | 90 | 2 | 2 |
Grace | Python Intro | 90 | 2 | 2 |
Eve | Python Intro | 85 | 4 | 3 |
Bob | SQL Basics | 95 | 1 | 1 |
Charlie | SQL Basics | 95 | 1 | 1 |
Alice | SQL Basics | 92 | 3 | 2 |
Diana | SQL Basics | 90 | 4 | 3 |
RANK()
는 동점 이후의 숫자를 건너뜁니다(예: 1 → 1 → 3)DENSE_RANK()
는 건너뛰지 않습니다(예: 1 → 1 → 2)
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!