Desvendando o Poder das Window Functions em SQL para Estudantes de Ciência de Dados

Bernardo Lago
Let’s Data
Published in
5 min readDec 27, 2023
Fonte: DALL•E 3

Introdução

As window functions (funções de janela) em SQL são uma ferramenta poderosa e versátil para analisar e processar dados em conjuntos de dados complexos. Se você é um estudante de ciência de dados, entender como utilizar essas funções pode elevar suas habilidades de manipulação e análise de dados a um novo patamar. Neste artigo, exploramos o que são as window functions, por que são importantes e como aplicá-las em situações do mundo real.

O que são Window Functions em SQL?

Em termos simples, as window functions em SQL permitem que você realize cálculos ou agregações em um conjunto específico de linhas relacionadas a uma linha de dados específica. Essas funções operam sobre uma "janela" de dados que é definida com base em condições específicas, como uma partição ou ordenação.

Existem várias funções de janela essenciais, incluindo ROW_NUMBER(), RANK(), DENSE_RANK(), SUM(), AVG(), LEAD() e LAG().

ROW_NUMBER():

  • Descrição: A função ROW_NUMBER() atribui um número sequencial único para cada linha em um conjunto de resultados, baseado na ordem especificada.
  • Uso Prático: Útil quando você precisa de uma identificação única para cada linha.

RANK():

  • Descrição: A função RANK() atribui uma classificação única para cada linha com base no valor especificado. Valores iguais recebem a mesma classificação, e o próximo valor recebe a classificação subsequente.
  • Uso Prático: Útil para identificar a posição relativa de valores em uma ordem específica.

DENSE_RANK():

  • Descrição: Similar ao RANK(), a função DENSE_RANK() também atribui classificações únicas, mas sem pular classificações para valores iguais.
  • Uso Prático: Útil quando você deseja evitar lacunas nas classificações para valores iguais.

SUM():

  • Descrição: A função SUM() calcula a soma cumulativa de uma expressão em um conjunto de resultados, considerando a ordem especificada pelas cláusulas OVER.
  • Uso Prático: Permite calcular somas acumulativas, como a soma acumulativa de receitas ao longo do tempo.

AVG():

  • Descrição: A função AVG() calcula a média cumulativa de uma expressão em um conjunto de resultados, com base na ordem especificada pelas cláusulas OVER.
  • Uso Prático: Útil para calcular médias móveis e tendências ao longo do tempo.

LEAD():

  • Descrição: A função LEAD() fornece o valor da próxima linha em relação à linha atual, com base na ordem especificada pelas cláusulas OVER.
  • Uso Prático: Útil para comparar valores consecutivos em séries temporais.

LAG():

  • Descrição: A função LAG() fornece o valor da linha anterior em relação à linha atual, com base na ordem especificada pelas cláusulas OVER.
  • Uso Prático: Similar ao LEAD(), útil para análise de séries temporais e comparação de valores consecutivos.

Vamos abordar cada uma delas com exemplos práticos.

ROW_NUMBER(), RANK() e DENSE_RANK()

Essas funções são comumente usadas para atribuir um número de linha a cada registro em um conjunto de dados, permitindo ordenação e classificação eficientes.

-- Exemplo de ROW_NUMBER(), RANK() e DENSE_RANK()
SELECT
Product,
Price,
ROW_NUMBER() OVER (ORDER BY Price) AS RowNum,
RANK() OVER (ORDER BY Price) AS Rank,
DENSE_RANK() OVER (ORDER BY Price) AS DenseRank
FROM Products;

Output:

Essa consulta atribui um número de linha (RowNum), um rank (Rank) e um rank denso (DenseRank) para cada produto com base no preço.

SUM() e AVG()

As funções SUM() e AVG() podem ser usadas com a cláusula OVER para calcular somas e médias em uma janela específica.

-- Exemplo de SUM() e AVG()
SELECT
Date,
Revenue,
SUM(Revenue) OVER (ORDER BY Date) AS RunningTotal,
AVG(Revenue) OVER (ORDER BY Date) AS MovingAverage
FROM SalesData;

Output:

Neste exemplo, calculamos o total acumulado e a média móvel da receita ao longo do tempo.

LEAD() e LAG()

LEAD() e LAG() permitem acessar valores de linhas subsequentes ou anteriores em uma janela, respectivamente.

-- Exemplo de LEAD() e LAG()
SELECT
Date,
Revenue,
LEAD(Revenue, 1) OVER (ORDER BY Date) AS NextDayRevenue,
LAG(Revenue, 1) OVER (ORDER BY Date) AS PreviousDayRevenue
FROM DailySales;

Output:

Nesta consulta, obtemos a receita do próximo dia (NextDayRevenue) e do dia anterior (PreviousDayRevenue) para cada dia.

Aplicação Prática em Ciência de Dados

Agora que entendemos as funções de janela, vamos considerar uma situação prática com um conjunto de dados fictício de vendas diárias.

Suponha que temos uma tabela chamada DailySales com colunas Date e Revenue. Queremos calcular a média móvel de 7 dias da receita para suavizar variações diárias.

-- Aplicação Prática em Ciência de Dados: Média Móvel de 7 Dias
SELECT
Date,
Revenue,
AVG(Revenue) OVER (ORDER BY Date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS SevenDayMovingAvg
FROM DailySales;

Output:

Nesta consulta, a cláusula ROWS BETWEEN 6 PRECEDING AND CURRENT ROW especifica que a janela de cálculo incluirá os 6 dias anteriores e o dia atual, calculando assim a média móvel de 7 dias.

Conclusão

As window functions em SQL são uma ferramenta essencial para manipular e analisar dados de forma eficaz. Ao entender essas funções e aplicá-las em situações do mundo real, os estudantes de ciência de dados podem melhorar suas habilidades de manipulação de dados e extrair insights valiosos. Esperamos que este artigo tenha fornecido uma compreensão sólida das funções de janela e como aplicá-las em seu próprio trabalho.

Nos ajude a te ajudar!

Se você gostou deste artigo e quer apoiar o Let’s Data, dê uns claps! E você pode fazer isso mais de uma vez, que tal uns 15?

Deixe um comentário dizendo o que acha deste assunto!

--

--

Bernardo Lago
Let’s Data

Data Scientist at NielsenIQ. Cofounder at Let’s Data