DENSE\_RANK
DENSE_RANK (순위 - 간격 없음)
DENSE_RANK 윈도우 함수는 파티션 안의 현재 행의 순위를 반환하며, 동률(ties)일 때 간격(gaps)을 두지 않습니다.
DENSE_RANK()는 윈도우의 ORDER BY 절에서 동등하게 비교되는 피어 행에 같은 순위를 부여해요. 다음 서로 다른 값은 다음 연속 순위를 받습니다.
출처: 문서
본문
DENSE_RANK()
사용 참고 사항
DENSE_RANK()는 인자를 받지 않습니다.- 순위는 각
PARTITION BY그룹마다 다시 시작됩니다. - 행 순위는 윈도우의
ORDER BY절에 의해 결정됩니다. - 동률 행에는 같은 순위가 부여되고, 이후 순위는 연속적으로 유지됩니다.
DENSE_RANK()에는 명시적 윈도우 프레임 절을 지정할 수 없습니다.
예시
동률일 때 간격 없이 영업사원을 연간 누계 매출로 순위 매깁니다.
SELECT
FirstName,
LastName,
SalesYTD,
DENSE_RANK() OVER (ORDER BY SalesYTD DESC) AS sales_rank
FROM Sales.vSalesPerson;
출력:
| FirstName | LastName | SalesYTD | sales_rank |
|---|---|---|---|
| Joe | Smith | 2251368.34 | 1 |
| Alice | Davis | 2151341.64 | 2 |
| James | Jones | 2151341.64 | 2 |
| Dane | Scott | 1251358.72 | 3 |
연속 순위를 사용해 부서 내 직원을 급여로 순위 매깁니다.
SELECT
department,
employee_name,
salary,
DENSE_RANK() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS salary_rank
FROM employees;
출력:
| department | employee_name | salary | salary_rank |
|---|---|---|---|
| Engineering | Alice | 160000 | 1 |
| Engineering | Bob | 150000 | 2 |
| Engineering | Carol | 150000 | 2 |
| Engineering | Dave | 140000 | 3 |
| Sales | Eve | 130000 | 1 |
| Sales | Frank | 120000 | 2 |