다음을 통해 공유


DENSE_RANK(Transact-SQL)

결과 집합 파티션 내 행의 순위를 순위 간격 없이 반환합니다. 행의 순위는 바로 앞 행의 순위에 1을 더한 것입니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

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 값이 파티션 내의 행에 적용되는 순서를 결정합니다. 순위 함수에 사용된 <order_by_clause>의 열에 정수를 나타낼 수 없습니다.

반환 유형

bigint

주의

같은 파티션에서 한 순위에 두 개 이상의 행이 연결된 경우 연결된 각 행에는 같은 순위가 지정됩니다. 예를 들어 성과가 가장 좋은 두 명의 판매 직원이 같은 SalesYTD 값을 갖는 경우 둘 다 1로 순위가 지정됩니다. 다음으로 높은 SalesYTD 값을 갖는 판매 직원이 순위 2로 지정됩니다. 이는 해당 행 앞에 오는 개별 행의 수보다 하나 더 큰 값입니다. 따라서 DENSE_RANK 함수가 반환하는 수는 간격 없이 항상 연속적인 순위를 갖게 됩니다.

전체 쿼리에 사용되는 정렬 순서는 결과에 나타나는 행의 순서를 결정합니다. 이는 순위 1로 지정된 행이 반드시 파티션에서 첫 번째 행일 필요는 없음을 의미합니다.

다음 예에서는 다양한 위치에 있는 제품 수량에 대한 DENSE_RANK를 반환합니다. OVER 절의 ORDER BY는 DENSE_RANK를 정렬하고 SELECT 문의 ORDER BY는 결과 집합을 정렬합니다.

USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity, 
    DENSE_RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity)     AS DENSE_RANK
FROM Production.ProductInventory i 
    INNER JOIN Production.Product p 
        ON i.ProductID = p.ProductID
ORDER BY Name;
GO