Olá pessoal!
Hoje o assunto é sobre funções de classificação, em jornada rumo a prova 70-461, aprendi que podemos classificar grupos de dados.
Essas funções nos auxiliam em criação de ranking, ou seja ordenação dos conjuntos de dados.
São elas:
RANK();
DENSE_RANK();
NTILE();
ROW_NUMBER();
Funções que podem ser utilizadas em diferentes situações, abaixo um exemplo simples de cada, para um melhor entendimento.
Para os exemplos a seguir, foram criados tabelas alunos, disciplina e notas.
RANK(): Classifica o conjunto de dados mantendo um GAP na ordenação.
O exemplo abaixo faz com que a classificação seja agrupado pela quebra e assim mantendo o contador do numero da linha.
SELECT DISTINCT RANK()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Aluno a
INNER JOIN AlunoDisciplina ad ON a.pkidaluno = ad.fkidaluno
INNER JOIN Disciplina d ON ad.fkIdDisciplina = d.pkIdDisciplina
ORDER BY d.nome
| Ordem | Disciplina |
| 1 | Biologia |
| 11 | Geografia |
| 21 | História |
| 31 | Matetmática |
| 41 | Português |
DENSE_RANK(): Mantém a classificação em ordem no agrupamento;
SELECT DISTINCT DENSE_RANK()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Aluno a
INNER JOIN AlunoDisciplina ad ON a.pkidaluno = ad.fkidaluno
INNER JOIN Disciplina d ON ad.fkIdDisciplina = d.pkIdDisciplina
ORDER BY d.nome
| Ordem | Disciplina |
| 1 | Biologia |
| 2 | Geografia |
| 3 | História |
| 4 | Matetmática |
| 5 | Português |
NTILE(): Agrupa pela quantidade de grupos que você informar.
SELECT DISTINCT NTILE(2)OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Disciplina d
ORDER BY d.Nome
| Ordem | Disciplina |
| 1 | Biologia |
| 1 | Geografia |
| 1 | História |
| 2 | Matetmática |
| 2 | Português |
ROW_NUMBER(): Ordena sem ter gap entre os grupos.
SELECT DISTINCT ROW_NUMBER()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Disciplina d
ORDER BY d.Nome
| Ordem | Disciplina |
| 1 | Biologia |
| 2 | Geografia |
| 3 | História |
| 4 | Matetmática |
| 5 | Português |
Com as funções de classificação é possível ordenar os grupos e ajustar a sua consulta de acordo com o solicitado.
Ainda é possível utilizar o comando PARTITION BY, mas a explicação de como utiliza-lo ficará para um próximo post.
Espero ter ajudado.
Até mais…
Felippe Oliveira
Valeu Felippe ! Salvou o dia !
Opa, fico feliz de poder ajudar.