A função de janela (window function) opera em um chamado "quadro de janelas", retornando um único valor para cada linha a partir da consulta subjacente.
As janelas são definidas pela clásula OVER().
Diferença entre funções de agregação e funções de janela?
Funções de agregação operam em um conjunto de linhas para retornar um único valor escalar, e as funções mais utilizadas são:
➽ SUM() calcula a soma dos valores do conjunto
➽ AVG() calcula a média dos valores do conjunto
➽ MAX() e MIN() retorna os maiores e menores valores, respectivamente
➽ COUNT() calcula a contagem de valores do conjunto
Utilizando a cláusula GROUP BY, é possível calcular os valores agregados.
Em window function (função de janela), é possível calcular os valores retornados aplicando funções de agregação, mas utlizando a cláusula OVER(). Assim, as agregações acontecem "olhando" para uma janela dos dados, e não seu todo.
Sintaxe da cláusula OVER()
[função de agregação] ([atributo de agregação)
OVER(PARTITION BY [atributos para "filtrar" a janela])
Para saber mais sobre a sintaxe da cláusula OVER(), clique aqui.
Analisando contexto, na prática
Nesse exemplo, vamos utilizar a base de dados de vendas abaixo.
Seus desafio, como analista de dados é:
➽ Criar um relatório contendo o id do cliente e a data da venda; e
➽ Calcular o valor acumulado das vendas por cliente e por ano/mês.
Para isso, usaremos o script:
SELECT
ClienteID,
DataVenda,
SUM(ValorVenda) OVER(PARTITION BY ClienteID, AnoVenda, MesVenda) as ValorVendaAnoMes
FROM [FatoVendas]
E, com isso, obtemos o resultado:
➽ Soma do valor vendido, agrupado por cliente, ano e mês da venda.
➽ Note que o atributo DataVenda não foi informado na cláusula OVER(), pois a cláusula OVER cria um subconjunto de dados individual, independente dos atributos retornados na consulta.
ClienteID | DataVenda | ValorVendaAnoMes |
1 | 27/02/2024 | 20.399,00 |
1 | 30/03/2024 | 20.649,00 |
2 | 26/01/2024 | 27.867,00 |
2 | 07/03/2024 | 14.755,00 |
3 | 05/01/2024 | 38.965,00 |
3 | 29/01/2024 | 38.965,00 |
3 | 19/02/2024 | 23.944,00 |
3 | 18/04/2024 | 22.126,00 |
3 | 10/05/2024 | 10.788,00 |
4 | 07/02/2024 | 50.615,00 |
4 | 15/02/2024 | 50.615,00 |
4 | 14/03/2024 | 10.878,00 |
4 | 22/05/2024 | 14.313,00 |
5 | 30/01/2024 | 26.139,00 |
5 | 09/05/2024 | 10.923,00 |
Quer saber mais sobre análise de contexto com SQL? Se inscreva para ser notificado sobre os novos conteúdos 🩵🚀
Comentarios