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()
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:
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 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
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 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.
É 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().
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 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:
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.