Compartilhar via


RANK (Transact-SQL)

Retorna a classificação de cada linha na partição de um conjunto de resultados. A classificação de uma linha é um mais o número de classificações que vêm antes da linha em questão.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • < partition_by_clause >
    Divide o conjunto de resultados produzido pela cláusula FROM nas partições às quais a função RANK é aplicada. Para obter a sintaxe de PARTITION BY, consulte Cláusula OVER (Transact-SQL).

  • < order_by_clause >
    Determina a ordem na qual os valores de RANK são aplicados às linhas de uma partição. Para obter mais informações, consulte Cláusula ORDER BY [Transact-SQL]. Um inteiro não pode representar uma coluna quando a < order_by_clause > é usada em uma função de classificação.

Tipos de retorno

bigint

Comentários

Se duas ou mais linhas empatarem em uma classificação, cada linha empatada receberá a mesma classificação. Por exemplo, se os dois melhores vendedores tiverem o mesmo valor de SalesYTD, ambos serão classificados com o número um. O vendedor com o próximo SalesYTD maior será classificado com o número três, porque há duas linhas com classificação mais alta. Portanto, a função RANK nem sempre retorna inteiros consecutivos.

A ordem de classificação usada para a consulta inteira determina a ordem na qual as linhas aparecem em um conjunto de resultados.

Exemplos

O exemplo a seguir classifica os produtos em inventário de acordo com suas quantidades. O conjunto de linhas é particionado por LocationID e ordenado por Quantity. Observe que ORDER BY na cláusula OVER ordena RANK, e que ORDER BY da instrução SELECT ordena o conjunto de resultados.

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