WINDOWS FUNCTIONS: Desvendando o Poder das Funções de Janela no SQL.

Elen Carvalho
comunidadeds
Published in
6 min readDec 10, 2023

Em SQL, uma função de janela ou função analítica é uma função que usa valores de uma ou várias linhas para retornar um valor para cada linha.

Fonte: Bing-IA

Na jornada pelo universo do SQL, é fundamental explorar todas as ferramentas disponíveis para aprimorar a eficiência das consultas. Nesse contexto, as Funções de Janela, também conhecidas como WINDOWS FUNCTIONS, surgem como aliadas poderosas, permitindo operações analíticas avançadas. Vamos desvendar o que são e como aproveitar ao máximo esse recurso.

O que são Funções de Janela (WINDOWS FUNCTIONS)?

Na segmentação feita utilizando a cláusula GROUP BY, onde agregamos linhas através de uma operação matemática dentro de um segmento que foi agregado, o resultado dessa agregação é o valor da operação para cada segmento. E aí está a diferença da agregação Group By X Windows Functions cujo resultado final não será um número por segmento, mas sim, a repetição do resultado final para todas as linhas do mesmo segmento.

Essa segunda forma é possível através da função de janela ”WINDOWS FUNCTION” do SQL.

Fonte: PostgreSQL

As Funções de Janela no SQL são um conjunto de funções analíticas que operam em um “intervalo” de linhas relacionadas a cada linha da consulta. Elas oferecem uma maneira inteligente de realizar cálculos em subconjuntos específicos de dados, proporcionando uma visão mais detalhada e contextual das informações e existem três tipos principais, que carregam os comandos das estatísticas descritivas que podem ser aplicadas dentro das funções de janela: agregação, ranqueamento e valor.

1.Funções de Agregação:

SUM(): Calcula a soma de valores em uma janela.
AVG(): Calcula a média dos valores em uma janela.
COUNT(): Conta o número de linhas em uma janela.
MIN(): Retorna o valor mínimo em uma janela.
MAX(): Retorna o valor máximo em uma janela.

2.Funções de Ranqueamento:

ROW_NUMBER(): Atribui um número sequencial às linhas dentro de uma janela.
RANK(): Atribui um ranking aos valores em uma janela, lidando com empates.
DENSE_RANK(): Atribui um ranking denso (sem lacunas) aos valores em uma janela.
NTILE(n): Divide a janela em N partes iguais e atribui um número de intervalo a cada parte.
PERCENT_RANK( ): Mostra o valor percentual do ranking para cada uma das linhas.

3.Funções de Valor:

LEAD(column, offset): Retorna o valor da coluna da linha que está “offset” (deslocamento ou distância específica em relação à linha atual dentro de uma janela) posições à frente da linha atual dentro da janela.
LAG(column, offset): Retorna o valor da coluna da linha que está “offset” posições atrás da linha atual dentro da janela.
FIRST_VALUE(column): Retorna o primeiro valor da coluna dentro da janela.
LAST_VALUE(column): Retorna o último valor da coluna dentro da janela.
NTH_VALUE(): Desloca os valores da coluna para a “N” posição, (N deve ser um número inteiro positivo).

A sintaxe da Windows Functions vai acontecer entre a cláusula Select e o From.

Onde:

Windows Function: É o nome da função de janela que você quer usar.
Expression: É o nome da coluna que você quer aplicar à operação.
OVER: É somente para identificar que é uma windows function “sobre a partição”.
PARTITION BY: Divide as linhas em partições, então nós podemos especificar quais linhas aplicar a operação matemática.
Partition List: É o nome da coluna a ser segmentada.
ORDER BY: É usado para ordenar as linhas dentro da agregação.
Order List: É o nome das colunas da ordenação.
ROWS: Indica os limites da janela.
Frame Clause: Usado para determinar os limites de linhas dentro da janela.

Como Utilizar Funções de Janela (WINDOWS FUNCTIONS):

1. OVER Clause: A Chave para o Poder das Funções de Janela.

O coração das Funções de Janela é a cláusula OVER. Ela define o conjunto de linhas usado para cada cálculo, determinando se a função opera em todo o conjunto de resultados ou em um segmento específico. Qualquer função sem uma cláusula OVER não é uma função de janela, mas sim uma função agregada ou de linha única.

2.PARTITION BY: Segmentando os Dados.

A cláusula PARTITION BY permite dividir o conjunto de resultados em partições com base em uma ou mais colunas. Isso é útil para realizar cálculos específicos dentro de grupos distintos.

Neste exemplo a consulta exibe o estado do cliente, a categoria, a quantidade de produtos vendidos e o percentual de vendas em relação ao total vendido no estado.

3.ORDER BY: Ordenando com Precisão.

A cláusula ORDER BY dentro da cláusula OVER define a ordem em que as linhas são processadas pela Função de Janela. Isso é crucial para cálculos que dependem de uma sequência específica.

Esse exemplo mostra uma consulta que exibe a data de compra, o valor de cada venda e o total acumulado de vendas até aquela data.

Podemos controlar o tamanho da janela nas (WINDOWS FUNCTIONS)?

As expressões PRECEDING, CURRENT, FOLLOWING, UNBOUNDED PRECEDING, e UNBOUNDED FOLLOWING, são usadas na cláusula ROWS de uma função de janela para especificar o intervalo das linhas sobre as quais a função será aplicada. Portanto é possível parametrizar o tamanho da janela.

1. PRECEDING: Indica linhas anteriores à linha atual na ordem de classificação especificada na cláusula ORDER BY.

2.CURRENT: Representa a linha atual na sequência ordenada.

3.FOLLOWING: Indica linhas seguintes à linha atual na ordem de classificação especificada na cláusula ORDER BY.

4.UNBOUNDED PRECEDING: Indica que o escopo começa desde o início do conjunto de resultados ou da partição, sem limite anterior.

5.UNBOUNDED FOLLOWING: Indica que o escopo vai até o final do conjunto de resultados ou da partição, sem limite posterior.

Este exemplo exibe uma consulta com a data de compra, o valor de cada venda e a média móvel dos últimos três valores de venda, incluindo o valor atual.

Benefícios Estratégicos das Funções de Janela (WINDOWS FUNCTIONS) na Prática:

Comparação Relativa:

Com as Funções de Janela, é possível realizar comparações relativas, como calcular a porcentagem de participação de cada funcionário no salário total do departamento. Permite calcular valores com base em um conjunto específico de linhas relacionadas a cada linha individual. Isso permite definir uma “janela” ou “partição” que representa o contexto relevante para cada cálculo.

Tendências e Variações:

Ao usar Funções de Janela com ORDER BY, é possível identificar tendências e variações ao longo do tempo ou em conjuntos específicos de dados. Permitindo analisar tendências temporais ao calcular valores agregados ou comparativos ao longo de um intervalo específico de tempo. Isso é útil para identificar padrões sazonais, variações diárias ou semanais e outras tendências temporais como comparações relativas a períodos anteriores.

Classificação Dinâmica:

A classificação dinâmica refere-se à capacidade de atribuir classificações ou ordens às linhas de acordo com condições específicas ou em relação a outras linhas, como classificar os dados de acordo com agregações, ranqueamentos ou outras operações específicas. Exemplo determinar a posição de cada funcionário em termos de salário dentro de seu departamento ou calcular o percentil de desempenho de cada aluno em uma turma usando PERCENT_RANK().

Fonte: Freepik

Conclusão: Elevando suas Consultas SQL a Novas Alturas

As Funções de Janela no SQL proporcionam uma abordagem eficiente e flexível para realizar classificação dinâmica em consultas SQL, permitindo que você adapte a ordenação de acordo com requisitos específicos e crie análises mais sofisticadas e personalizadas.

Ao dominar as Funções de Janela no SQL, você abre portas para análises mais sofisticadas e contextualizadas. Essa ferramenta oferece uma perspectiva única sobre os dados, proporcionando insights valiosos que podem orientar decisões estratégicas. Pratique, experimente e descubra como as Funções de Janela podem potencializar suas habilidades no mundo fascinante do SQL.

Para aprimorar nossos estudos deixo como dica um vídeo explicativo sobre WINDOWS FUNCTIONS e um artigo sobre Análise de Dados com SQL: Guia Inicial Parte I e Parte II.

Explore mais sobre SQL e aprimore suas habilidades no universo da análise de dados!

--

--

Elen Carvalho
comunidadeds

A melhor forma de aprender é compartilhando conhecimentos.