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)