RANK
RANK (순위 - 간격 포함)
RANK 윈도우 함수는 파티션 안의 현재 행의 순위를 반환하며, 동률(ties)일 때 간격(gaps)을 둡니다.
RANK()는 윈도우의 ORDER BY 절에서 동등하게 비교되는 피어 행에 같은 순위를 부여해요. 다음 순위는 동률 행 수만큼 앞으로 건너뜁니다.
출처: 문서
본문
RANK()
사용 참고 사항
RANK()는 인자를 받지 않습니다.- 순위는 각
PARTITION BY그룹마다 다시 시작됩니다. - 행 순위는 윈도우의
ORDER BY절에 의해 결정됩니다. - 동률 행에는 같은 순위가 부여되고, 이후 순위에는 간격이 생깁니다.
RANK()에는 명시적 윈도우 프레임 절을 지정할 수 없습니다.
예시
동률일 때 간격을 두고 영업사원을 연간 누계 매출로 순위 매깁니다.
SELECT
FirstName,
LastName,
SalesYTD,
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 | 4 |
부서 내 직원을 급여로 순위 매깁니다.
SELECT
department,
employee_name,
salary,
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 | 4 |
| Sales | Eve | 130000 | 1 |
| Sales | Frank | 120000 | 2 |