Funções de Ranqueamento

Existem 4 funções de ranqueamento que podem ser utilizados com a cláusula OVER:

  • ROW_NUMBER
  • RANK
  • DENSE_RANK
  • NTILE

Um exemplo de uso:

O retorno é:

A função ROW_NUMBER() retorna uma ordenação sequencial para o resultado da consulta, baseado no que foi especificado no ORDER BY da cláusula OVER. Note que eu poderia retornar a ordenação pela coluna custid, modificando apenas a coluna rownum e mantendo a mesma ordem no retorno da consulta.

Ao contrário da função ROW_NUMBER(), onde cada registro obrigatoriamente possuirá um valor distinto (inclusive desconsiderando os empates – veja as linhas 7 e 8), as funções RANK e DENSE_RANK levam os empates em consideração. A diferença entre elas diz respeito ao próximo registro. Enquanto a função RANK considera a quantidade de linhas para determinar o próximo registro (dois empates com valor 7 e o próximo registro com valor 9), a função DENSE_RANK leva em consideração os registros distintos (mesmo estando na linha 9, o empate nos dois registros anteriores produziu como retorno o valor 8).

A função NTILE faz com que o retorno seja agrupado em quantidades iguais (ou a mais próxima possível). Como a consulta possui 830 registros e foi solicitado dividir em 10 grupos, o SQL SERVER dividiu em 10 grupos iguais de 83 registros cada. Se o retorno fosse, por exemplo, de 832 registros, ele incluiria 1 registro a mais nos 2 primeiros grupos, ou seja, o primeiro e o segundo bloco teriam 84 registros, enquanto os demais teriam 83 registros cada.

2 comentários

  1. Fala Logan, td certo?

    Logan, vê se tu pode me ajudar:

    Tenho que fazer um select que quando um determinado campo é 0 ele deve fazer uma subselect e quando 1 outra subselect. Tem como fazer isso?

    Ex: select * from abc
    where campo = 1 then codigo in (select xxx)
    or campo = 0 then codigo in (select yyyy)

    Valeu a força,

    Abração

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.