CodeGym /Cursos /SQL SELF /Funções de janela: o superpoder escondido do SQL

Funções de janela: o superpoder escondido do SQL

SQL SELF
Nível 29 , Lição 0
Disponível

À primeira vista, pode parecer que o SQL já tem tudo pra análise de dados: GROUP BY, agregações, subqueries... Mas isso é só o começo. Bem-vindo ao mundo das funções de janela — uma ferramenta poderosa que te deixa trabalhar com dados linha por linha, mantendo todo o contexto.

Funções de janela permitem fazer cálculos — soma, média, rankings e outros — em uma “janela” de linhas, sem colapsar os dados. Ou seja, diferente das funções agregadas normais (SUM(), AVG(), COUNT()), você pega o resultado e os detalhes em cada linha.

Imagina que você quer calcular a receita acumulada por pedido. Com GROUP BY você perderia os pedidos individuais — só sobraria a soma. Mas com uma função de janela, você adiciona o resultado direto em cada linha, sem perder nada.

Funções de janela são especialmente práticas porque não destroem os dados: cada linha fica no lugar, e os resultados dos cálculos só aparecem em novas colunas. Isso permite fazer análises complexas sem subqueries ou estruturas pesadas — tudo rola direto numa query só. Essas funções são perfeitas pra tarefas como ranking, cálculo de médias móveis ou comparar valores entre linhas. O código fica legível e o resultado, preciso.

Quando isso é especialmente útil:

  • Ranking de funcionários, vendedores, produtos — quem tá em qual posição.
  • Séries temporais — como algo mudou por dia ou semana.
  • Vendas e finanças — quanto acumulou em cada etapa, quais pedidos estão acima da média, quem tá no top 25%.

Onde as funções de janela são usadas

Em qualquer área onde o contexto importa, não só o resultado final:

  • relatórios de vendas;
  • análise de comportamento do cliente;
  • criação de gráficos com métricas acumuladas;
  • segmentação de dados (tipo por quartis);
  • cálculo de desvios e tendências.

Elas são um achado pra quem trabalha com SQL todo dia. Vamos ver alguns exemplos do mundo real onde funções de janela podem salvar sua vida.

Exemplo 1: Ranking de dados

Imagina que você tem uma lista de estudantes com as notas deles na prova. Você quer dar pra cada estudante a posição dele na turma. Com funções de janela isso fica moleza. Por exemplo, as funções RANK() ou ROW_NUMBER() resolvem isso fácil.

Exemplo 2: Análise de dados temporais

E se você precisa ver como a receita da empresa mudou mês a mês? Você precisa de uma soma acumulada de receitas. Usando a função de janela SUM() com uma janela definida, você pega esse resultado rapidinho.

Exemplo 3: Quartis e divisão em grupos

Quer dividir os dados em grupos iguais (tipo por receita) pra segmentar clientes? A função NTILE() te ajuda nisso. Bora descobrir quem tá no top 25% dos clientes e quem tá lá embaixo no ranking.

Como isso fica na prática?

Uma função de janela só adiciona o resultado no conjunto final de dados:

SELECT
    student_id,
    grade,
    RANK() OVER (ORDER BY grade DESC) AS rank
FROM 
    students;

Aqui a gente pega uma tabela onde cada estudante tem seu ranking único pela nota.

Uma analogia simples

Imagina que você tá numa corrida com um grupo de amigos. Cada um corre num ritmo, mas você quer saber em que posição tá agora. Em vez de parar todo mundo e montar uma tabela de líderes (como faz o GROUP BY), você só olha ao redor e descobre seu ranking atual.

É isso que a função de janela faz: ela não para a corrida, não separa todo mundo em grupos — só adiciona informação, mantendo o movimento e os detalhes. Todo mundo continua correndo, mas agora você tem análise extra — tipo quantas pessoas estão na sua frente, qual seu ritmo comparado com a média, etc.

Vantagens sobre abordagens tradicionais

Vamos ver um problema clássico: calcular o ranking dos vendedores pela receita. Tem dois jeitos:

  1. Sem funções de janela. Você teria que fazer uma subquery ou até várias, primeiro ordenando os dados, depois numerando. Isso fica longo e difícil de ler.

  2. Com funções de janela. Só uma query com sintaxe bonita e clara, e o resultado já aparece. Por exemplo:

SELECT
    seller_id,
    revenue,
    RANK() OVER (PARTITION BY region ORDER BY revenue DESC) AS rank_in_region
FROM 
    sales;

Essa query já separa os vendedores por região e numera eles em ordem decrescente de receita.

Exemplo real

Agora imagina que você é analista e tá olhando dados de vendas. Você precisa saber:

  • receita total de cada mês,
  • como a receita mudou em relação ao mês anterior,
  • ranking das regiões pela receita total.

Dá pra fazer tudo isso usando funções de janela e até numa query só. Mas isso já é assunto pra próximas aulas.

Agora, com o básico das funções de janela na mão, você tá pronto pra ver a sintaxe delas e sentir o poder das funções ROW_NUMBER(), RANK(), DENSE_RANK() e NTILE(). Bora pra próxima aula!

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION