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

Anúncios