Funes de Ranqueamento

Existem 4 funes de ranqueamento que podem ser utilizados com a clusula OVER:

  • ROW_NUMBER
  • RANK
  • DENSE_RANK
  • NTILE

Um exemplo de uso:

O retorno :

A funo ROW_NUMBER() retorna uma ordenao sequencial para o resultado da consulta, baseado no que foi especificado no ORDER BY da clusula OVER. Note que eu poderia retornar a ordenao pela coluna custid, modificando apenas a coluna rownum e mantendo a mesma ordem no retorno da consulta.

Ao contrrio da funo ROW_NUMBER(), onde cada registro obrigatoriamente possuir um valor distinto (inclusive desconsiderando os empates – veja as linhas 7 e 8), as funes RANK e DENSE_RANK levam os empates em considerao. A diferena entre elas diz respeito ao prximo registro. Enquanto a funo RANK considera a quantidade de linhas para determinar o prximo registro (dois empates com valor 7 e o prximo registro com valor 9), a funo DENSE_RANK leva em considerao os registros distintos (mesmo estando na linha 9, o empate nos dois registros anteriores produziu como retorno o valor 8).

A funo NTILE faz com que o retorno seja agrupado em quantidades iguais (ou a mais prxima possvel). 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 fora,

    Abrao

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

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