Menu
Coddy logo textTech

RANK & DENSE_RANK Functions

Coddy SQL 여정의 기초 섹션에 포함된 레슨 — 72개 중 65번째.

ROW_NUMBER()는 순위 함수의 한 유형이며, 두 가지 더 있습니다: RANK()DENSE_RANK().

RANK() 함수는 ROW_NUMBER()처럼 행을 번호 매기지만, 동일한 행에 대해 동일한 번호를 부여하고 번호를 건너뜁니다. DENSE_RANK()RANK()와 유사하지만, 번호를 건너뛰지 않습니다.

예를 들어:

idlevel
15
26
36
47
57
65
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

이것은 다음을 반환합니다:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

설명:

  • ROW_NUMBER(): 항상 고유: 1, 2, 3, 4, 5, 6
  • RANK():
    • 레벨 5 (2 rows): 둘 다 순위 1을 받음
    • 레벨 6 (2 rows): 둘 다 순위 3을 받음 (2를 건너뜀)
    • 레벨 7 (2 rows): 둘 다 순위 5을 받음 (4를 건너뜀)
  • DENSE_RANK():
    • 레벨 5 (2 rows): 둘 다 순위 1을 받음
    • 레벨 6 (2 rows): 둘 다 순위 2을 받음 (건너뛰지 않음)
    • 레벨 7 (2 rows): 둘 다 순위 3을 받음 (건너뛰지 않음)
challenge icon

챌린지

쉬움

사용 가능한 테이블 및 열:

  • <strong>medals</strong>: <strong>region</strong>, <strong>medal_color</strong>, <strong>medal_count</strong>

지역, 총 메달 수 (색상에 관계없이 모든 메달의 합계), 그리고 두 가지 유형의 순위를 보여주는 쿼리를 작성하세요:

  1. 총 메달 합계에 대한 regular_rank (간격 포함)
  2. 총 메달 합계에 대한 dense_rank (간격 없음)

결과를 다음에 따라 정렬하세요:

order by total_medals desc, region asc

치트 시트

SQL은 동점 값에 대해 다르게 작동하는 세 가지 순위 함수를 제공합니다:

  • ROW_NUMBER() - 고유한 순차 번호를 할당합니다
  • RANK() - 동점 값에 동일한 순위를 할당하고 후속 순위를 건너뜁니다
  • DENSE_RANK() - 동점 값에 동일한 순위를 할당하지만 순위를 건너뛰지 않습니다

예를 들어:

idlevel
15
26
36
47
57
65
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

이것은 다음을 반환합니다:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

직접 해보기

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨