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.

Icône Lien de rubriqueConventions 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)

Aide et Informations

Assistance sur SQL Server 2005