Microsoft SQL Server
Fonctions de classement
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