logo

Função RANK no SQL Server

A função RANK no SQL Server é um tipo de função de classificação. Esta função irá atribuir o número a cada linha dentro da partição de uma saída . Ele atribui a classificação a cada linha como um mais a classificação da linha anterior. Quando a função RANK encontra dois valores idênticos na mesma partição, ela atribui a eles o mesmo número de classificação. Além disso, o próximo número na classificação será a classificação anterior mais os números duplicados. Portanto, esta função nem sempre atribui a classificação das linhas em ordem consecutiva.

A função RANK também é uma subparte das funções de janela. Os seguintes pontos devem ser lembrados ao usar esta função :

string.formato string java
  • Sempre funciona com a cláusula OVER().
  • Ele atribui uma classificação a cada linha com base na cláusula ORDER BY.
  • Ele atribui uma classificação a cada linha em ordem consecutiva.
  • Ele sempre atribui uma classificação às linhas, começando com uma para cada nova partição.

NOTA: A classificação atribui valores temporários para linhas na partição quando a consulta é executada.

O SQL Server fornece as seguintes funções de classificação :

  • CLASSIFICAÇÃO()
  • ROW_NUMBER()
  • DENSE_RANK()
  • NTIL()

Vamos aprender cada função de classificação em detalhes. Primeiramente, criaremos uma tabela para demonstração de todas essas funções. As instruções a seguir criam uma tabela chamada classificação_demo com três colunas:

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

A seguir, inseriremos algumas linhas nesta tabela conforme abaixo:

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

Podemos verificar a tabela usando a instrução SELECT. Ele exibe a saída abaixo:

Função RANK no SQL Server

Função RANK()

Esta função é usada para determinar a classificação de cada linha no conjunto de resultados. A sintaxe a seguir ilustra o uso de uma função RANK no SQL Server:

 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Nesta sintaxe,

  • O Cláusula SOBRE define o particionamento e a ordem de um resultado antes que a função de janela associada seja aplicada.
  • O Cláusula PARTITION BY divide a saída produzida pela cláusula FROM na partição. Em seguida, a função é aplicada a cada partição e reinicializada quando a fronteira da divisão atravessa as partições. Se não tivermos definido esta cláusula, a função tratará todas as linhas como uma única partição.
  • O ORDENAR POR é uma cláusula obrigatória que determina a ordem das linhas de maneira decrescente ou crescente com base em um ou mais nomes de colunas antes da aplicação da função.

Exemplo

Vamos ver como funciona a função RANK() no SQL Server. A instrução abaixo usará a função de classificação para atribuir numeração para cada linha:

python escreve json no arquivo
 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

Como não usamos o Cláusula PARTITION BY , a função tratou todo o resultado como uma única partição. A execução da instrução exibirá a saída abaixo:

Função RANK no SQL Server

Nesta saída, podemos ver que algumas das linhas obtêm a mesma classificação porque têm o mesmo valor no coluna da cidade . E o próximo número na classificação será a classificação anterior mais um número de números duplicados.

A seguinte afirmação é outro exemplo onde usaremos uma cláusula partição por que dividirá as linhas com base no cidade coluna e atribua uma classificação a cada linha dentro de uma partição. A ordem da saída é baseada no primeiro nome :

 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

Ele exibirá a saída abaixo:

Função RANK no SQL Server

Função ROW_NUMBER()

Esta função é usada para retornar o número sequencial exclusivo para cada linha dentro de sua partição. A numeração das linhas começa em um e aumenta em um até que o número total de linhas da partição seja atingido. Ele retornará as diferentes classificações para a linha com valores semelhantes que a tornam diferente da função RANK().

A sintaxe abaixo ilustra o uso de uma função ROW_NUMBER() no SQL Server:

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Exemplo

Execute a seguinte consulta para atribuir um número de sequência para cada linha:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Ele atribuirá a classificação da tabela de acordo com sua cidade . Aqui podemos ver que ele atribui classificações diferentes para a linha que possui os mesmos valores de cidade.

lista de strings java
Função RANK no SQL Server

Se alterarmos a ordem de classificação de ascendente para descendente com a cláusula ORDER BY, esta função também alterará o RANK de acordo. Veja a declaração abaixo:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

Aqui está o resultado:

Função RANK no SQL Server

Função DENSE_RANK()

Esta função atribui uma classificação única para cada linha dentro de uma partição de acordo com o valor da coluna especificado sem lacunas. Sempre especifica a classificação em ordem consecutiva. Se conseguirmos um valor duplicado , esta função atribuirá a mesma classificação, e a próxima classificação será o próximo número sequencial. Esta característica difere a função DENSE_RANK() da função RANK().

Sanjay Dutt e

A sintaxe abaixo ilustra o uso de uma função DENSE_RANK() no SQL Server:

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Exemplo

A consulta a seguir usa a função DENSE_RANK() para atribuir um número de classificação para cada linha:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Ele retornará a saída abaixo, onde podemos ver que os valores duplicados têm a mesma classificação, e a classificação seguinte será o próximo número sequencial.

Função RANK no SQL Server

É outro exemplo da função DENSE_RANK() usando a cláusula PARTITION BY. Esta cláusula dividirá as linhas com base na coluna da cidade, e a ordem de um conjunto de resultados será baseada no first_name:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

Obteremos a saída abaixo porque não existem dois nomes iguais. Neste caso, a saída é semelhante à função RANK().

Função RANK no SQL Server

Vamos atualizar o nome com a seguinte consulta:

 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

Agora, execute a mesma consulta novamente. Veremos que esta tabela recebeu o mesmo nome em Cidade da Califórnia . Portanto, a classificação também é a mesma para ambos os nomes.

Função RANK no SQL Server

Função NTIL(N)

Esta função é usada para distribuir linhas de uma partição ordenada em um número predefinido (N) de grupos aproximadamente iguais. Cada grupo de linhas obtém sua classificação com base na condição definida e inicia a numeração a partir de um grupo. Ele atribui um número do balde para cada linha de um grupo que representa o grupo ao qual pertence.

A sintaxe a seguir ilustra o uso de uma função NTILE() no SQL Server:

 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Exemplo

es5 versus es6

A consulta a seguir usa a função NTILE() para atribuir um número de classificação para cada linha:

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

A tabela especificada tem oito registros . Portanto, o NTIL(3) diz que o conjunto de resultados deve ter um grupo de três registros . A execução da instrução exibirá a saída abaixo:

Função RANK no SQL Server

Este artigo explicará todas as funções RANK usadas no SQL Server com vários exemplos. Também mostra as principais diferenças entre essas funções. Essas funções são muito úteis para desenvolvedores explorarem e gerenciarem bem seus dados.