Classificação com Funções ROW_NUMBER, RANK, DENSE_RANK, NTILE no SQL Server

Classificação com Funções ROW_NUMBER, RANK, DENSE_RANK, NTILE no SQL Server

Nesta matéria do Web Mundi.com aprenderemos como utilizar as Funções de classificação no SQL Server.

Estas funções foram incluídas no SQL Server, a partir da versão 2005 e possuímos um total de 4 funções de Ranking e classificação.
Para demonstrar e facilitar a compreensão destes conceitos, vamos utilizar o banco de Dados AdventureWorks que pode ser baixado do GitHub da Microsoft em:

https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks

Estas funções fazem com que problemas “clássicos” de SQL fiquem muito mais fáceis de se resolver.

As funções de Ranking retornam um valor de classificação para cada linha em uma partição.

Todas as funções de Ranking são do tipo não-determinísticas, ou seja, as funções não-determinísticas podem retornar resultados diferentes cada vez que são chamadas com um conjunto específico de valores de entrada, mesmo se o estado do banco de dados que elas acessam permaneça o mesmo.

Funções de Ranking e classificação do SQL Server

ROW_NUMBER () OVER ([ <partition_by_clause>] <order_by_clause>)
Retorna o número seqüencial de uma linha dentro de uma partição de um conjunto de resultados, começando em 1 para a primeira linha em cada partição.
RANK () OVER ([ <partition_by_clause>] <order_by_clause>) ([RANK () OVER <partition_by_clause>] <order_by_clause>)
Retorna (Rank) a posição de cada linha dentro da partição de um conjunto de resultados.
DENSE_RANK () OVER ([ <partition_by_clause>] <order_by_clause>) ([DENSE_RANK () OVER <partition_by_clause>] <order_by_clause>)
Retorna (Rank) a posição de linhas dentro da partição de um conjunto de resultados, sem quaisquer lacunas no ranking.
NTILE (integer_expression) OVER ([ <partition_by_clause>] <order_by_clause>) NTILE integer_expression () OVER ([ <partition_by_clause>] <order_by_clause>)
Distribui as linhas de uma partição ordenada em um determinado número de grupos.
Todas as definições acima e a sintaxe foram extraídas do BOL do SQL Server (BOL = Books On Line).
O código abaixo explica o uso de todas as funções quatro juntos em uma consulta.
USE AdventureWorks ; 
GO 
SELECT c.FirstName , c.LastName , 
ROW_NUMBER () OVER ( ORDER BY a.PostalCode ) AS 'Row Number', 
RANK () OVER ( ORDER BY a.PostalCode ) AS 'Rank', 
DENSE_RANK () OVER ( ORDER BY a.PostalCode ) AS 'Dense Rank',
NTILE ( 4 ) OVER ( ORDER BY a.PostalCode ) AS 'Quartile', 
s.SalesYTD , a.PostalCode 
FROM Sales.SalesPerson s 
INNER JOIN Person.Contact c 
ON s.SalesPersonID = c.ContactID 
INNER JOIN Person.Address a 
ON a.AddressID = c.ContactID 
WHERE TerritoryID IS NOT NULL 
AND SalesYTD <> 0 ;

Veja a Query e seu resultado:

Classificação com Funções ROW_NUMBER, RANK, DENSE_RANK, NTILE

 

Você também pode encontrar mais informações sobre a utilização das Funções de Classificação no SQL Server no site da Microsoft.

Obrigado

Espero que você tenha gostado desta matéria sobre Funções de Classificação no banco de dados SQL Server da Microsoft.
Se você gostou, compartilhe estas dicas com um amigo ou participe de nossas redes sociais.

Caso queira nos incentivar a criar mais conteúdos como este, prestigie nossos anunciantes.

Um Grande Abraço

Renato Sanches
Gestor de TI – Tecnologia da Informação
Trabalhando com o banco de dados SQL Server desde 1994

Posts Similares