Поиск…


Синтаксис

  • 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow