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.
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 AdventureWorks2008R2;
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