DENSE_RANK (Transact-SQL)
Retourne le rang des lignes à l'intérieur de la partition d'un ensemble de résultats, sans aucun vide dans le classement. Le rang d'une ligne est égal à un plus le nombre de rangs distincts précédant la ligne en question.
Conventions de la syntaxe de Transact-SQL
Syntaxe
DENSE_RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
Arguments
- < partition_by_clause >
Divise l'ensemble de résultats généré par la clause FROM en partitions auxquelles la fonction DENSE_RANK est appliquée. Pour connaître la syntaxe de PARTITION BY, consultez Clause OVER (Transact-SQL).
- < order_by_clause >
Détermine dans quel ordre les valeurs DENSE_RANK sont appliquées aux lignes dans une partition. Un entier ne peut pas représenter une colonne lorsque <order_by_clause> est utilisé dans une fonction de classement.
Notes
Si au moins deux lignes sont liées à un rang de la même partition, elles reçoivent le même rang. Par exemple, si les deux meilleurs commerciaux ont la même valeur SalesYTD, ils reçoivent tous deux le rang un. Le commercial dont la valeur SalesYTD est immédiatement inférieure reçoit le rang deux. Cela correspond à un rang de plus que le nombre de lignes distinctes précédant cette ligne. Par conséquent, les nombres retournés par la fonction DENSE_RANK ne comportent pas de vides et définissent toujours des rangs consécutifs.
L'ordre de tri utilisé pour l'ensemble de la requête détermine l'ordre d'apparition des lignes dans un résultat. Cela implique qu'une ligne ayant le rang numéro un n'est pas nécessairement la première ligne de la partition.
Type des valeurs retournées
bigint
Exemple
Cet exemple retourne le DENSE_RANK
de la quantité de produits dans divers lieux. Notez que l'argument ORDER BY
de la clause OVER
détermine l'ordre des valeurs DENSE_RANK
tandis que l'argument ORDER BY
de l'instruction SELECT
détermine l'ordre de l'ensemble de résultats.
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
Voir aussi
Référence
RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
Fonctions de classement (Transact-SQL)
Fonctions (Transact-SQL)