1. RANK
RANK() 함수는 윈도우 함수 중 하나로, 결과 집합의 각 행에 순위를 할당합니다. 동일한 값을 가진 행에는 동일한 순위를 부여하며, 다음 순위는 중복된 순위 개수만큼 건너뛰어 부여됩니다. 즉, 동점자가 발생하면 순위가 비어있는 것처럼 보이는 것이 특징입니다.
RANK() OVER (PARTITION BY column1 ORDER BY column2)
- PARTITION BY: 선택 사항으로, 특정 열을 기준으로 그룹화하여 각 그룹 내에서 순위를 나타내고, 생략하면 전체 결과 집합에 대해 순위를 매깁니다.
- ORDER BY: 순위를 매길 기준 열을 지정합니다.
🏷️ 예시
SELECT
student_name,
score,
RANK() OVER (ORDER BY score DESC) AS rank
FROM
scores;
2. DENSE_RANK
DENSE_RANK() 함수 역시 윈도우 함수 중 하나로, 결과 집합의 각 행에 순위를 할당합니다. 이 함수는 RANK() 함수와 비슷하고 동일한 값을 가진 행에 동일한 순위를 부여하는 점은 같지만, 그 다음 순위를 부여할 때 순위의 수를 건너뛰지 않는 점이 다릅니다.
DENSE_RANK() OVER (PARTITION BY column1 ORDER BY column2)
🏷️ 예시
SELECT
student_name,
score,
DENSE_RANK() OVER (ORDER BY score DESC) AS rank
FROM
scores;
3. PERCENT_RANK
PERCENT_RANK() 함수는 윈도우 함수로, 결과 집합 내에서 각 행의 백분위 순위를 계산합니다. 이 함수는 0과 1 사이의 값을 반환하며, 결과 집합에서 첫 번째 행은 항상 0을 반환합니다. 순위 계산 시 동일한 값을 가지는 행들은 동일한 백분위 순위를 공유합니다.
PERCENT_RANK() OVER (PARTITION BY column1 ORDER BY column2)
🏷️ 예시
SELECT
student_name,
score,
PERCENT_RANK() OVER (ORDER BY score DESC) as percentile_rank
FROM
student_scores;
4. ROW_NUMBER
ROW_NUMBER()는 SQL에서 제공하는 윈도우 함수 중 하나로 결과 집합의 각 행에 고유한 숫자를 할당합니다. 할당하는 숫자는 1부터 시작하며, 주로 정렬된 데이터에 순위를 부여하는 데 사용됩니다.
ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2)
🏷️ 예시
SELECT
student_name,
score,
ROW_NUMBER() OVER (ORDER BY score DESC) AS rank
FROM
scores;
✔️ RANK는 동점인 경우 같은 순위를 부여하고 다음 순위는 동점 개수만큼 건너뛰는 반면, ROW_NUMBER는 동점 여부와 상관없이 연속적인 순위를 부여합니다.
📖 Reference
'코딩 공부 > DB' 카테고리의 다른 글
| [SQL] SET (0) | 2025.08.05 |
|---|---|
| [DB] UNION과 UNION ALL (3) | 2025.08.04 |
| [DB] NoSQL (3) | 2024.10.16 |
| [DB] Redis (0) | 2024.10.09 |
| [DB] Index (1) | 2024.10.06 |