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″>
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>
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″>
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
Ver todos os posts por Rajendra Gupta
- 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