Recherche…


Syntaxe

  • DENSE_RANK () OVER ([<partition_by_clause>] <order_by_clause>)
  • RANK () OVER ([partition_by_clause] order_by_clause)

Paramètres

Arguments Détails
<partition_by_clause> Divise le jeu de résultats produit par la clause FROM en partitions auxquelles la fonction DENSE_RANK est appliquée. Pour la syntaxe PARTITION BY , voir Clause OVER (Transact-SQL) .
<order_by_clause> Détermine l'ordre dans lequel la fonction DENSE_RANK est appliquée aux lignes d'une partition.
OVER ( [ partition_by_clause ] order_by_clause) partition_by_clause divise le jeu de résultats produit par la clause FROM en partitions auxquelles la fonction est appliquée. Si elle n'est pas spécifiée, la fonction traite toutes les lignes du jeu de résultats de la requête en tant que groupe unique. order_by_clause détermine l'ordre des données avant l'application de la fonction. Le order_by_clause est requis. La <rows or range clause> de la clause OVER ne peut pas être spécifiée pour la fonction RANK . Pour plus d'informations, voir Clause OVER (Transact-SQL) .

Remarques

Si deux ou plusieurs lignes sont liées à un rang dans la même partition, chaque ligne liée reçoit le même rang. Par exemple, si les deux principaux vendeurs ont la même valeur SalesYTD, ils sont tous deux classés un. Le vendeur avec le prochain SalesYTD le plus élevé est classé numéro deux. C'est un de plus que le nombre de lignes distinctes avant cette ligne. Par conséquent, les nombres renvoyés par la fonction DENSE_RANK n'ont pas de lacunes et ont toujours des rangs consécutifs.

L'ordre de tri utilisé pour l'ensemble de la requête détermine l'ordre dans lequel les lignes apparaissent dans un résultat. Cela implique qu'une ligne classée numéro un ne doit pas nécessairement être la première ligne de la partition.

DENSE_RANK n'est pas déterministe. Pour plus d'informations, voir Fonctions déterministes et non déterministes .

RANG()

A RANK () Retourne le rang de chaque ligne dans le jeu de résultats de la colonne partitionnée.

Par exemple :

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 ()

Identique à celle de RANK (). Il renvoie le rang sans aucune lacune:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow