SQLShack (Português)

we perform calculations on data using various aggreged functions such as Max, Min, and AVG. Nós obtemos uma única linha de saída usando estas funções. SQL Sever fornece funções de RANK SQL para especificar rank para campos individuais de acordo com as categorizações. Devolve um valor agregado para cada linha participante. As funções de RANK SQL também sabem como funções de janelas.

  • Nota: O termo Windows não está relacionado com o sistema operativo Microsoft Windows., Estas são funções SQL RANK.

temos as seguintes funções rank.

  • ROW_NUMBER()
  • RANK()
  • DENSE_RANK()
  • NTILE()

No SQL funções de CLASSIFICAÇÃO, utilizamos a MAIS() cláusula para definir um conjunto de linhas no conjunto de resultados. Nós também podemos usar a partição SQL por cláusula para definir um subconjunto de dados em uma partição. Você também pode usar ordem por cláusula para classificar os resultados em uma ordem descendente ou ascendente.antes de explorarmos estas funções SQL RANK, vamos preparar dados de amostra., Nesta amostra de dados, temos resultados de exames para três alunos em Matemática, Ciências e Inglês.

temos os seguintes dados de amostra na tabela ExamResult.

Let’s use each SQL Rank Functions in upcoming examples.

ROW_Number () SQL RANK function

we use ROW_Number () SQL RANK function to get a unique sequential number for each row in the specified data. Ele dá o rank um para a primeira linha e, em seguida, aumenta o valor por um para cada linha. Nós obtemos escalas diferentes para a linha com valores semelhantes também.,

Execute a seguinte consulta para obter uma classificação para os alunos de acordo com suas marcas.,

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks) RowNumber
FROM ExamResult;

By default, it sorts the data in ascending order and starts assigning ranks for each row., Na imagem acima, temos a linha número 1 para a marca 50.

Podemos Especificar ordem descendente com ordem por cláusula, e ele muda a classificação de acordo.,ae”>

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks desc) RowNumber
FROM ExamResult;

RANK() SQL RANK Function

We use RANK() SQL Rank function to specify rank for each row in the result set., Temos resultados de alunos para três disciplinas. Queremos classificar o resultado dos estudantes de acordo com suas marcas nas matérias. Por exemplo, na imagem seguinte, a estudante Isabella obteve as notas mais altas em inglês e as mais baixas em Matemática. De acordo com as marcas, Isabella obtém o primeiro posto em inglês e terceiro lugar em Matemática.

Execute a seguinte consulta para obter este conjunto de resultados.,v id=”c5a1f1b829″>

1
2
3
4
5
6
7

SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;

Let’s execute the following query of SQL Rank function and look at the result set., Nesta consulta, não especificamos a partição SQL por cláusula para dividir os dados em um subconjunto menor. Nós usamos a função Rank SQL com cláusula sobre a cláusula de marcas (em ordem descendente) para obter ranks para as respectivas linhas.,div id=”7d9d5b54ae”>

1
2
3
4
5
6

SELECT Studentname,
Subject,
Marks,
RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;

In the output, we can see each student get rank as per their marks irrespective of the specific subject., Por exemplo, as marcas mais altas e mais baixas no conjunto de resultados completo são 90 e 50, respectivamente. No conjunto de resultados, a marca mais alta fica RANK 1, e a marca mais baixa fica RANK 9.

Se dois estudantes tiverem as mesmas notas( no nosso exemplo, os números de Linha 4 e 5), as suas fileiras também são as mesmas.

DENSE_RANK() função de RANK SQL

usamos a função DENSE_RANK() para indicar um número único de rank dentro da partição, de acordo com o valor especificado na coluna. É semelhante à função Rank com uma pequena diferença.,

na função de RANK SQL DENSE_RANK (), se tivermos valores duplicados, SQL atribui diferentes níveis a essas linhas também. Idealmente, devemos obter o mesmo rank para duplicados ou valores semelhantes.

vamos executar a seguinte consulta com a função DENSE_RANK ().,

1
2
3
4
5
6

SELECIONE Studentname,
Assunto
Marcas de
DENSE_RANK() OVER(FIM POR Marcas DESC) Classificação
a PARTIR de ExamResult
ORDEM de Classificação;

Na saída, você pode ver que nós temos a mesma posição para ambos os Lily e Isabella, que marcou 70 marcas.,

vamos usar a função DENSE_RANK em combinação com a partição SQL por cláusula.,v id=”2d0aafc924″>

1
2
3
4
5
6
7

SELECIONE Studentname,
Assunto
Marcas,
DENSE_RANK() OVER(PARTITION POR Assunto, ORDEM POR Marcas DESC) Classificação
a PARTIR de ExamResult
ORDER BY Studentname,
Classificação;

Nós não temos dois alunos com semelhante interrogação; portanto o conjunto de resultados semelhante à Função de CLASSIFICAÇÃO no presente caso.,

vamos atualizar a marca do estudante com a seguinte consulta e repetir a consulta.

1
Atualização Examresult conjunto de Marcas=70, onde Studentname=’Isabel’ e Subject=’Matemática’

podemos ver que no grupo de estudantes, Isabella ficou semelhante marcas de Matemática e de Ciências., A classificação também é a mesma para ambos os assuntos neste caso.

Vamos ver a diferença entre o RANK() e DENSE_RANK() SQL função de Classificação, com a seguinte consulta.,b829″>

1
2
3
4
5
6
7

SELECIONE Studentname,
Assunto
Marcas de
DENSE_RANK() OVER(PARTITION BY StudentName ORDEM POR Marcas ) Classificação
a PARTIR de ExamResult
ORDER BY Studentname,
Classificação;

Na saída, você pode ver a diferença na classificação de saída da função dentro de partições., Não temos nenhuma lacuna na função DENSE_RANK.

na imagem seguinte, você pode ver que Isabella tem números semelhantes nos dois assuntos. Uma função rank atribui rank 1 para valores similares no entanto, internamente ignora rank dois, e a próxima linha fica rank três.

na função Dense_Rank, mantém o rank e não dá nenhuma lacuna para os valores.

NTILE(N) SQL RANK function

we use the NTILE(N) function to distribute the number of rows in the specified (N) number of groups., Cada grupo de linha obtém o seu rank de acordo com a condição especificada. Precisamos especificar o valor para o número desejado de grupos.

no meu exemplo, temos nove registros na tabela de exames. O NTILE (2) mostra que precisamos de um grupo de dois registros no resultado.,

1
2
3
4
5

SELECT *,
NTILE(2) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

In the output, we can see two groups. Group 1 contains five rows, and Group 2 contains four rows.,

similarmente, NTILE(3) divide o número de linhas de três grupos com três registros em cada grupo.,

1
2
3
4
5

SELECT *,
NTILE(3) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

We can use SQL PARTITION BY clause to have more than one partition., Na seguinte consulta, cada partição em assuntos é dividida em dois grupos.,

1
2
3
4

SELECT *,
NTILE(2) OVER(PARTITION BY subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY subject, rank;

Practical usage of SQL RANK functions

We can use SQL RANK function to fetch specific rows from the data., Suponha que queremos obter os dados dos alunos das fileiras 1 a 3. Na consulta a seguir, usamos expressões de tabela comuns (CTE) para obter dados usando a função ROW_NUMBER () e mais tarde filtrado o resultado de CTE para satisfazer a nossa condição.,d>

COM StudentRanks COMO
(
SELECT *, ROW_NUMBER() MAIS( ordenação POR Marca) COMO Classifica
a PARTIR de ExamResult
)
SELECIONE StudentName , Marcas
a PARTIR de StudentRanks
ONDE Classifica >= 1 e Classifica <=3
ORDER BY Classifica

podemos usar o DESLOCAMENTO de OBTENÇÃO de comando a partir do SQL Server 2012 para buscar um determinado número de registros.,v id=”0fa57edc44″>

COM StudentRanks COMO
(
SELECT *, ROW_NUMBER() MAIS( ordenação POR Marca) COMO Classifica
a PARTIR de ExamResult
)
SELECIONE StudentName , Marcas
a PARTIR de StudentRanks
ORDER BY Fileiras DESLOCAMENTO de 1 LINHAS de OBTENÇÃO de 3 LINHAS SOMENTE;

Um resumo rápido do SQL Funções de CLASSIFICAÇÃO

ROW_Number

Ele atribui o sequencial de número de classificação para cada registro único.,

RANK

atribui o número de rank a cada linha de uma partição. Ele salta o número para valores semelhantes.

Dense_RANK

atribui o número de ordem a cada linha numa partição. Não salta o número para valores semelhantes.

NTILE(N)

divide o número de linhas por partição especificada e atribui um valor único na partição.,

conclusão

neste artigo, explorámos as funções de classificação SQL e a diferença entre estas funções. É útil que os desenvolvedores sql estejam familiarizados com essas funções para explorar e gerenciar seus dados bem. Se você tiver quaisquer comentários ou perguntas, sinta-se livre para deixá-los nos comentários abaixo.,

  • Autor
  • Posts Recentes
Como uma certificação MCSA e Microsoft Certified Trainer em Gurgaon, na Índia, com 13 anos de experiência, Rajendra trabalha para uma variedade de empresas de grande porte com foco em otimização de desempenho, monitoramento, alta disponibilidade e recuperação de desastres estratégias e implementação., Ele é o autor de centenas de artigos autoritários no SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS/Amazon RDS, Git, e tecnologias relacionadas que foram vistas por mais de 10m leitores até à data. ele é o criador de uma das maiores coleções online gratuitas de artigos sobre um único tópico, com sua série de 50 partes no servidor SQL sempre em grupos de disponibilidade. Com base em sua contribuição para a comunidade de servidores SQL, ele foi reconhecido com vários prêmios, incluindo o prestigiado “melhor autor do ano” continuamente em 2020 e 2021 no SQLShack.,Raj está sempre interessado em novos desafios, então se você precisar de Ajuda em qualquer assunto coberto em seus escritos, ele pode ser alcançado em rajendra.gupta16@gmail.,com
Ver todos os posts por Rajendra Gupta

posts mais Recentes por Rajendra Gupta (ver todas)
  • Realização de pequenas e principais atualizações de versão para o AWS RDS para SQL Server – janeiro 29, 2021
  • a Implantação da AWS RDS PostgreSQL instâncias – 27 de janeiro de 2021
  • a Migração de seu local de bases de dados SQL para a AWS RDS para SQL Server usando o AWS DMS – 25 de janeiro de 2021

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *