DENSE_RANK(Transact-SQL)
결과 집합 파티션 내 행의 순위를 순위 간격 없이 반환합니다. 행의 순위는 바로 앞 행의 순위에 1을 더한 것입니다.
구문
DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )
인수
<partition_by_clause>
FROM 절이 생성한 결과 집합을 DENSE_RANK 함수가 적용되는 파티션으로 나눕니다. PARTITION BY 구문은 OVER 절(Transact-SQL)을 참조하십시오.<order_by_clause>
DENSE_RANK 함수가 파티션 내의 행에 적용되는 순서를 결정합니다.
반환 형식
bigint
주의
같은 파티션에서 한 순위에 두 개 이상의 행이 연결된 경우 연결된 각 행에는 같은 순위가 지정됩니다. 예를 들어 성과가 가장 좋은 두 명의 판매 직원이 같은 SalesYTD 값을 갖는 경우 둘 다 1로 순위가 지정됩니다. 다음으로 높은 SalesYTD 값을 갖는 판매 직원이 순위 2로 지정됩니다. 이는 해당 행 앞에 오는 개별 행의 수보다 하나 더 큰 값입니다. 따라서 DENSE_RANK 함수가 반환하는 수는 간격 없이 항상 연속적인 순위를 갖게 됩니다.
전체 쿼리에 사용되는 정렬 순서는 결과에 나타나는 행의 순서를 결정합니다. 이는 순위 1로 지정된 행이 반드시 파티션에서 첫 번째 행일 필요는 없음을 의미합니다.
예
1.파티션 내의 행 순위 지정
다음 예에서는 재고 수량을 기준으로 지정한 인벤토리 위치의 제품에 순위를 부여합니다. 결과 집합은 LocationID를 기준으로 분할되고 Quantity를 기준으로 논리적으로 정렬됩니다. 제품 494와 495는 수량이 동일합니다. 두 제품은 서로 연결되어 있으므로 동일하게 순위 1이 부여됩니다.
USE AdventureWorks2012;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,DENSE_RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS Rank
FROM Production.ProductInventory AS i
INNER JOIN Production.Product AS p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY i.LocationID;
GO
결과 집합은 다음과 같습니다.
ProductID Name LocationID Quantity Rank
----------- ---------------------------------- ---------- -------- -----
494 Paint - Silver 3 49 1
495 Paint - Blue 3 49 1
493 Paint - Red 3 41 2
496 Paint - Yellow 3 30 3
492 Paint - Black 3 17 4
495 Paint - Blue 4 35 1
496 Paint - Yellow 4 25 2
493 Paint - Red 4 24 3
492 Paint - Black 4 14 4
494 Paint - Silver 4 12 5
(10 row(s) affected)
2.결과 집합의 모든 행 순위 지정
다음 예제에서는 연봉이 상위 10위권에 들어가는 직원을 반환합니다. PARTITION BY 절을 지정하지 않았으므로 결과 집합의 모든 행에 DENSE_RANK 함수가 적용되었습니다.
USE AdventureWorks2012;
GO
SELECT TOP(10) BusinessEntityID, Rate,
DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory;
결과 집합은 다음과 같습니다.
BusinessEntityID Rate RankBySalary
---------------- --------------------- --------------------
1 125.50 1
25 84.1346 2
273 72.1154 3
2 63.4615 4
234 60.0962 5
263 50.4808 6
7 50.4808 6
234 48.5577 7
285 48.101 8
274 48.101 8