Access Employees

Utilizando a função OVER() no SQL Server

Published in by Ygor dos Santos Silva

Neste tutorial, vamos explorar como agrupar dados por uma coluna, como no nosso exemplo Id, sem precisar fazer um GROUP BY. Para isso, vamos usar o conceito de Funções de Janela.

O Que São Funções de Janela no SQL Server?

As funções de janela no SQL Server são utilizadas para aplicar cálculos de agregação sem a necessidade de agrupar as linhas com o comando GROUP BY. Isso permite que você realize operações como somar, contar ou calcular a média dos dados, mantendo todas as linhas visíveis. Isso é muito útil quando você precisa de análises detalhadas e agregadas ao mesmo tempo, sem perder a individualidade dos dados.

Vamos usar um exemplo prático para ilustrar como as funções de janela podem ser usadas para calcular totais, médias, contagens e outras métricas dentro de cada grupo de dados, no caso, cada time identificado pelo Id. Em vez de usar GROUP BY, vamos aplicar as funções de janela para calcular esses agregados sem perder as informações individuais de cada jogador do nosso Corinthians.

Código SQL para Calcular Totais, Médias e Outras Métricas


DECLARE @TB_TESTE TABLE (Id int, Nome varchar(max), Valor decimal(18,2))

INSERT INTO @TB_TESTE
VALUES	
    (1, 'Craque Neto', 5000), 
    (1, 'Marcelinho Carioca', 1000.2),
    (2, 'Socrates', 3321),
    (3, 'Cassio', 3321),
    (3, 'Yuri Alberto', 3321)

SELECT  
    *,   
    SUM(Valor) OVER (PARTITION BY Id) AS Total,
    AVG(Valor) OVER (PARTITION BY Id) AS [Avg],
    COUNT(Valor) OVER (PARTITION BY Id) AS [Count],
    MIN(Valor) OVER (PARTITION BY Id) AS [Min],
    MAX(Valor) OVER (PARTITION BY Id) AS [Max]
FROM @TB_TESTE

Como Funciona a Cláusula OVER()?

Ao usar a função de janela OVER(), você pode especificar que deseja calcular agregados, como a soma, a média ou a contagem, sem agrupar os dados. Isso é feito usando a cláusula PARTITION BY, que permite dividir os dados em grupos. No exemplo acima, estamos calculando os totais, médias e outras métricas por time (Id), mantendo as linhas de cada jogador intactas.

O uso da cláusula OVER() nos permite calcular as agregações para cada grupo (ou Id, no nosso exemplo) sem a necessidade de agrupar os dados. O resultado será uma tabela como esta:

Id Nome Valor Total Avg Count Min Max
1 Craque Neto 5000.00 6000.20 3000.100000 2 1000.20 5000.00
1 Marcelinho Carioca 1000.20 6000.20 3000.100000 2 1000.20 5000.00
2 Socrates 3321.00 3321.00 3321.000000 1 3321.00 3321.00
3 Cassio 3321.00 6642.00 3321.000000 2 3321.00 3321.00
3 Yuri Alberto 3321.00 6642.00 3321.000000 2 3321.00 3321.00

Saiba mais

Se você quiser explorar mais variações do uso da cláusula OVER() para outras funções de agregação e calcular métricas em diferentes tipos de dados, acesse a documentação oficial do SQL Server.

← Return to start