RANK & DENSE_RANK 함수
Coddy SQL 여정의 기초 섹션에 포함된 레슨. 72개 중 65번째.
ROW_NUMBER()는 순위 함수의 한 유형이며, 두 가지가 더 있습니다: RANK()와 DENSE_RANK().
RANK() 함수는 ROW_NUMBER()처럼 행에 번호를 매기지만, 동일한 행에는 같은 번호를 부여하고 번호를 건너뜁니다. DENSE_RANK()는 RANK()와 비슷하지만 번호를 건너뛰지 않습니다.
예:
| id | level |
| 1 | 5 |
| 2 | 6 |
| 3 | 6 |
| 4 | 7 |
| 5 | 7 |
| 6 | 5 |
SELECT id,
ROW_NUMBER() OVER (ORDER BY level) as row_num,
RANK() OVER (ORDER BY level) as row_rank,
DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1다음 결과를 반환합니다:
| id | row_num | row_rank | row_dense_rank |
| 1 | 1 | 1 | 1 |
| 6 | 2 | 1 | 1 |
| 2 | 3 | 3 | 2 |
| 3 | 4 | 3 | 2 |
| 4 | 5 | 5 | 3 |
| 5 | 6 | 5 | 3 |
설명:
ROW_NUMBER(): 항상 고유함: 1, 2, 3, 4, 5, 6RANK():- level 5 (2개 행): 둘 다 rank 1을 받음
- level 6 (2개 행): 둘 다 rank 3을 받음 (2를 건너뜀)
- level 7 (2개 행): 둘 다 rank 5를 받음 (4를 건너뜀)
DENSE_RANK():- level 5 (2개 행): 둘 다 rank 1을 받음
- level 6 (2개 행): 둘 다 rank 2를 받음 (건너뛰지 않음)
- level 7 (2개 행): 둘 다 rank 3을 받음 (건너뛰지 않음)
챌린지
쉬움사용 가능한 테이블 및 열:
medals:region,medal_color,medal_count
지역, 총 메달 수(색상에 관계없이 모든 메달의 합계) 및 두 가지 유형의 순위를 표시하는 쿼리를 작성하세요:
regular_rank(동점 순위 사이에 간격이 있음) — 메달 합계를 기준으로dense_rank(동점 순위 사이에 간격이 없음) — 메달 합계를 기준으로
결과를 다음 기준으로 정렬하세요:
order by total_medals desc, region asc직접 해보기
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: SQL 플레이그라운드