Comando over partition

470 palavras 2 páginas
Cláusula OVER
A cláusula OVER determina o particionamento e a ordenação do conjunto de linhas antes da aplicação de funções de janela (Agregação e Classificação).

A sintaxe é a seguinte:

-Para Funções de Agregação (SUM – COUNT – AVG – etc.)
OVER(Partition by Campo)
-Para Funções de Classificação (RANK – NTILE – DENSE_RANK – ROW_NUMBER)
OVER(Partition by Campo Order by Campo)

Exemplo:

1-) Criação do ambiente. Criaremos uma tabela temporária que registra os acessos dos funcionários.
CREATE TABLE #Acesso
(
Codigo int identity(1,1) primary key, Nome Varchar(50), Data datetime
)
–Preenchimento da tabela
INSERT INTO #Acesso VALUES(‘Ozimar’, ’2012-01-12 08:35′)
INSERT INTO #Acesso VALUES(‘Bill’, ’2012-01-12 09:02′)
INSERT INTO #Acesso VALUES(‘Steven’, ’2012-01-12 09:08′)
INSERT INTO #Acesso VALUES(‘Steven’, ’2012-01-12 09:32′)
INSERT INTO #Acesso VALUES(‘Ozimar’, ’2012-01-13 08:15′)
INSERT INTO #Acesso VALUES(‘Bill’, ’2012-01-13 08:27′)
INSERT INTO #Acesso VALUES(‘Steven’, ’2012-01-13 08:54′)
INSERT INTO #Acesso VALUES(‘Ozimar’, ’2012-01-14 09:21′)
INSERT INTO #Acesso VALUES(‘Steven’, ’2012-01-14 09:32′)
OBJETIVO: Listar a relação de acessos dos funcionários incluindo uma coluna com o total de acessos.
–SOLUÇÃO SEM OVER
SELECT A.Nome, A.Data, TabGroup.TotalAcessos
FROM #Acesso A
INNER JOIN
(
SELECT Nome, COUNT(*) TotalAcessos FROM #Acesso GROUP BY Nome
) TabGroup ON A.Nome=TabGroup.Nome
–SOLUÇÃO COM OVER
SELECT Nome, Data, count (*) over (partition by Nome) TotalAcessos
FROM #Acesso
A cláusula Partition By funciona como se fosse um Group By. Criando grupos, que chamamos de janelas.
Veja que o código ficou bem mais simples, porém a vantagem fica ainda maior quando começamos a exigir mais da consulta.
Por exemplo, se precisar excluir um dia nesta pesquisa, no primeiro exemplo você irá colocar o filtro nas duas consultas, sendo que no segundo exemplo bastará um filtro, veja abaixo.
–SOLUÇÃO SEM OVER

Relacionados

  • Programação
    1000 palavras | 4 páginas
  • Tecnologo
    4250 palavras | 17 páginas
  • Trabalho Sobre Redes
    4945 palavras | 20 páginas
  • DRDB Linux
    3262 palavras | 14 páginas
  • dicionario tecnico
    15818 palavras | 64 páginas
  • Dicionário técnico para engenharia mecânica
    30576 palavras | 123 páginas
  • Mestre
    22131 palavras | 89 páginas
  • nao sei
    98566 palavras | 395 páginas
  • Sql para olap
    4195 palavras | 17 páginas
  • O WebHostManager
    3751 palavras | 16 páginas