RANK (Transact-SQL)

Retourne le rang de chaque ligne au sein de la partition d'un ensemble de résultats. Le rang d'une ligne est un, plus le nombre de rangs précédant la ligne en question.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

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 RANK est appliquée. Pour connaître la syntaxe de PARTITION BY, consultez Clause OVER (Transact-SQL).

  • < order_by_clause >
    Détermine l'ordre d'application des valeurs RANK aux lignes d'une partition. Pour plus d'informations, consultez Clause ORDER BY (Transact-SQL). Un entier ne peut pas représenter une colonne lorsque <order_by_clause> est utilisé dans une fonction de classement.

Types de retour

bigint

Notes

Si au moins deux lignes sont liées pour un rang, chacune d'entre elles reçoit le même rang. Par exemple, si les deux meilleurs vendeurs ont la même valeur SalesYTD, leur rang à tous deux est un. Le rang du vendeur qui suit dans la hiérarchie SalesYTD est trois, car il existe deux lignes au rang supérieur. Par conséquent, la fonction RANK ne retourne pas toujours des entiers consécutifs.

L'ordre de tri utilisé pour toute la requête détermine l'ordre d'apparition des lignes dans un ensemble de résultats.

Exemple

L'exemple suivant classe les produits d'inventaire en fonction de leurs quantités. L'ensemble de lignes est partitionné par LocationID et trié par Quantity. Notez que l'argument ORDER BY de la clause OVER détermine l'ordre des valeurs 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
    ,RANK() OVER 
    (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK'
FROM Production.ProductInventory i 
    INNER JOIN Production.Product p 
        ON i.ProductID = p.ProductID
ORDER BY p.Name;
GO