Microsoft SQL Server
Функции ранжирования
Поиск…
Синтаксис
- DENSE_RANK () OVER ([<partition_by_clause>] <order_by_clause>)
- RANK () OVER ([partition_by_clause] order_by_clause)
параметры
аргументы | подробности |
---|---|
<partition_by_clause> | Разделение набора результатов, созданного предложением FROM , на разделы, к которым DENSE_RANK функция DENSE_RANK . Для синтаксиса PARTITION BY см. Раздел OVER (Transact-SQL) . |
<order_by_clause> | Определяет порядок, в котором функция DENSE_RANK применяется к строкам в разделе. |
OVER ( [ partition_by_clause ] order_by_clause) | partition_by_clause делит результирующий набор, созданный предложением FROM , на разделы, к которым применяется функция. Если не указано, функция обрабатывает все строки набора результатов запроса как одну группу. order_by_clause определяет порядок данных перед применением функции. Требуется order_by_clause. Предложение <rows or range clause> предложения OVER не может быть указано для функции RANK . Для получения дополнительной информации см. Раздел OVER (Transact-SQL) . |
замечания
Если две или более строки привязаны к рангу в одном разделе, каждая связанная строка получает тот же ранг. Например, если у двух топ-менеджеров есть одинаковое значение SalesYTD, они оба ранжируются. Продавца со следующим самым высоким SalesYTD занимает второе место. Это больше, чем количество отдельных строк, которые появляются перед этой строкой. Поэтому числа, возвращаемые функцией DENSE_RANK
, не имеют пробелов и всегда имеют последовательные ряды.
Порядок сортировки, используемый для всего запроса, определяет порядок, в котором строки появляются в результате. Это означает, что строка, занявшая первое место, не должна быть первой строкой в разделе.
DENSE_RANK
является недетерминированным. Для получения дополнительной информации см. Детерминированные и недетерминированные функции .
РАНГ()
A RANK () Возвращает ранг каждой строки в результирующем наборе секционированного столбца.
Например:
Select Studentid,Name,Subject,Marks,
RANK() over(partition by name order by Marks desc)Rank
From Exam
order by name,subject
Studentid Name Subject Marks Rank
101 Ivan Maths 70 2
101 Ivan Science 80 1
101 Ivan Social 60 3
102 Ryan Maths 60 2
102 Ryan Science 50 3
102 Ryan Social 70 1
103 Tanvi Maths 90 1
103 Tanvi Science 90 1
103 Tanvi Social 80 3
DENSE_RANK ()
То же, что и RANK (). Он возвращает ранг без пробелов:
Select Studentid, Name,Subject,Marks,
DENSE_RANK() over(partition by name order by Marks desc)Rank
From Exam
order by name
Studentid Name Subject Marks Rank
101 Ivan Science 80 1
101 Ivan Maths 70 2
101 Ivan Social 60 3
102 Ryan Social 70 1
102 Ryan Maths 60 2
102 Ryan Science 50 3
103 Tanvi Maths 90 1
103 Tanvi Science 90 1
103 Tanvi Social 80 2