Поделиться через


DENSE_RANK (Transact-SQL)

Возвращает ранг строк в секции результирующего набора без промежутков в ранжировании. Ранг строки равен количеству различных значений рангов, предшествующих строке, увеличенному на единицу.

Значок ссылки на разделСинтаксические обозначения в 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 количества товаров в разных местах. Обратите внимание, что ключевое слово ORDER BY в предложении OVER упорядочивает DENSE_RANK, а в инструкции SELECT — результирующий набор.

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 
    JOIN Production.Product p ON i.ProductID = p.ProductID
    ORDER BY Name;
GO

См. также

Справочник

RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
Ранжирующие функции (Transact-SQL)
Функции (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005