SQL avançado: como usar CTEs e funções de janela em 20 minutos

Se suas consultas em SQL já começaram a ficar longas, difíceis de revisar ou cheias de subconsultas repetidas, talvez esteja na hora de avançar um nível.

A boa notícia é que esse salto não exige trocar de ferramenta, abrir um notebook ou partir direto para uma arquitetura complexa. Com CTEs e funções de janela, você consegue organizar melhor suas análises, criar etapas intermediárias mais claras e calcular métricas avançadas sem perder o detalhe de cada linha.

Neste guia de SQL avançado, você vai entender como usar CTEs e funções de janela de forma prática, com exemplos de aplicação, boas práticas e caminhos para evoluir suas análises sem deixar suas queries confusas.

O que é (e quando usar) uma CTE

Uma CTE em SQL, sigla para Common Table Expression, é um bloco nomeado criado dentro da própria consulta. Ela começa com o comando WITH e existe apenas durante a execução daquela query.

Na prática, a CTE funciona como uma etapa intermediária do seu pipeline analítico. Primeiro, você prepara ou filtra os dados. Depois, pode agregar, classificar, cruzar informações e, por fim, calcular os indicadores finais.

Com isso, a consulta fica mais organizada e fácil de revisar, principalmente quando a análise envolve muitas regras de negócio.

Use CTEs quando precisar:

  • Dividir um problema em etapas claras, facilitando a leitura, a manutenção e a revisão por outras pessoas do time.
  • Reaproveitar subconsultas, evitando repetir trechos longos ao longo da query.
  • Isolar regras de negócio, como clientes ativos, transações válidas ou pedidos concluídos, antes de calcular métricas.

Além disso, as CTEs ajudam a tornar o raciocínio da análise mais visível. Em vez de esconder toda a lógica dentro de subqueries difíceis de acompanhar, você cria blocos com nomes claros e uma sequência mais próxima do processo real de análise.

Por isso, esse recurso é especialmente útil para quem trabalha com BI, análise de dados, CRM, produto, marketing ou operações e precisa transformar consultas complexas em entregas mais confiáveis.

Para aprofundar os conceitos e diferenças entre bancos de dados, vale consultar as documentações oficiais sobre CTEs no PostgreSQL, MySQL 8+ e SQL Server.

Funções de janela: o poder de calcular por “partições”

As funções de janela em SQL, também chamadas de window functions ou funções analíticas, permitem calcular métricas por grupos lógicos sem reduzir o resultado a uma linha por grupo.

Na prática, elas ajudam a responder perguntas mais avançadas sem perder o detalhe da base. Diferente do GROUP BY, que agrupa os dados e resume a saída, as funções de janela mantêm cada linha visível e acrescentam novos cálculos ao lado dela.

Para isso, a janela é definida com dois elementos principais:

  • PARTITION BY: indica como os dados serão divididos em grupos lógicos, como cliente, região, vendedor, produto ou mês.
  • ORDER BY: define a ordem usada para cálculos sequenciais, como ranking, acumulado, comparação com linha anterior ou média móvel.

 

Com isso, você consegue criar análises mais completas dentro da própria consulta SQL, sem precisar exportar a base ou depender de etapas manuais.

As funções de janela são úteis para:

  • Ranking e classificação: priorizar clientes, vendedores, contas ou produtos usando funções como ROW_NUMBER(), RANK() e DENSE_RANK().
  • Acumulações e tendências: calcular receita acumulada, metas atingidas, evolução por período e contagens progressivas.
  • Médias móveis e sazonalidade: analisar variações ao longo do tempo em marketing, produto, operações e vendas.
  • Percentis e cortes por performance: comparar NPS, ticket médio, tempo de atendimento ou distribuição de resultados com funções como PERCENT_RANK() e NTILE().
  • Deduplicação inteligente: identificar o registro mais recente por cliente, pedido ou conta usando ROW_NUMBER() com uma chave de negócio e ordenação por data.

 

Além disso, as funções de janela ajudam a deixar a análise mais próxima da pergunta de negócio. Em vez de criar várias consultas intermediárias para calcular ranking, histórico e comparação, você consegue organizar boa parte desse raciocínio em uma única query mais estruturada.

Por isso, elas são especialmente importantes para quem trabalha com análise de dados, BI, CRM, produto, marketing ou operações e precisa criar métricas mais ricas sem perder rastreabilidade.

Para consultar sintaxe e recursos disponíveis em cada banco de dados, vale acessar as documentações oficiais sobre window functions no PostgreSQL, SQL Server e BigQuery.

Orquestrando CTE + janela (fluxo mental de 20 min)

Depois de entender CTEs e funções de janela separadamente, o próximo passo é usar os dois recursos juntos na mesma análise.

Essa combinação ajuda a organizar o raciocínio da consulta. Primeiro, você estrutura os dados em etapas com CTEs. Depois, aplica funções de janela para calcular rankings, acumulados, médias móveis, percentis ou comparações entre linhas.

Na prática, o fluxo pode seguir esta lógica:

  1. Defina o objetivo da análise: comece pela pergunta de negócio. Por exemplo: ranquear clientes por crescimento de receita nos últimos 90 dias ou identificar produtos com maior variação de vendas.
  2. Use a primeira CTE para qualificar os dados: padronize datas, valide IDs, remova duplicidades e filtre registros que não fazem sentido para a análise.
  3. Crie uma segunda CTE para agregações base: escolha o grão certo da consulta, como cliente, pedido, dia, mês ou produto. Em seguida, calcule métricas iniciais, como receita, quantidade, frequência ou ticket médio.
  4. Aplique a função de janela: use OVER(PARTITION BY ... ORDER BY ...) para criar rankings, acumulados, médias móveis ou percentis sem perder o detalhe das linhas.
  5. Finalize com as colunas de negócio: na saída final, exponha apenas as informações necessárias para interpretação, como cliente, período, métrica, ranking, faixa ou score. Além disso, documente o critério usado para que outras pessoas consigam revisar a lógica.

 

Com esse encadeamento, o SQL fica mais legível e mais fácil de manter. Em vez de criar uma consulta longa, difícil de revisar e cheia de subqueries escondidas, você transforma a análise em etapas claras.

Isso reduz erros, facilita a revisão por pares e ajuda o time a adaptar a query quando a regra de negócio muda.

Desempenho e legibilidade: boas práticas que importam

  • Particione com propósito. PARTITION BY define quanto dado cada cálculo lê; partições gigantes degradam desempenho. Avalie partições por chave de negócio (conta, canal, região) e reduza colunas desnecessárias antes da janela;
  • Ordenação é cara. ORDER BY dentro da janela pode exigir sorts pesados; garanta índices (ou clustering) coerentes com o grão temporal;
  • Pré-agregue cedo. Use CTEs para chegar ao grão correto e diminuir linhas antes das janelas;
  • Evite recomputar. Se a mesma janela é usada em vários indicadores, calcule uma vez na CTE e reutilize;
  • Cuidado com semântica por motor. Alguns bancos materializam CTEs, outros otimizam/inlinam; teste com EXPLAIN/EXPLAIN ANALYZE no seu ambiente;
  • Valide extremos. Janelas no início/fim da série (primeiras datas) podem ter menos observações; alinhe a regra com o time (ex.: janelas “parciais” vs. “completas”).

 

Se quiser ver como essa disciplina de preparação + narrativa entra em relatórios executivos, confira o post da Tekne sobre automatização de relatórios com GPT e Power BI.

Casos de uso que geram valor rápido

CTEs e funções de janela em SQL ajudam a resolver problemas comuns de análise sem transformar a consulta em um bloco difícil de manter.

Além de deixar o código mais organizado, esses recursos permitem criar métricas úteis para áreas como Marketing, Vendas, Produto, Suporte, Finanças e Operações.

Veja alguns exemplos práticos:

  • Marketing e CRM: você pode ranquear clientes por crescimento recente de receita, calcular médias móveis de engajamento e criar percentis de LTV para priorizar campanhas. Com isso, o time consegue identificar grupos com maior potencial e personalizar comunicações.
  • Vendas: funções de janela ajudam a calcular acumulado mensal por representante, ranking por conversão e detecção de outliers no ciclo comercial. Assim, fica mais fácil comparar desempenho sem perder o detalhe por vendedor, região ou conta.
  • Produto e Suporte: é possível acompanhar tempo médio móvel de resolução, percentil 95 de latência e classificação de features por adoção. Na prática, isso ajuda a enxergar gargalos, priorizar melhorias e acompanhar a evolução da experiência do usuário.
  • Finanças e Operações: CTEs e funções de janela também apoiam análises de run-rate acumulado, projeções simplificadas por período e comparativos por canal ou região. Dessa forma, o time consegue acompanhar tendências e revisar indicadores com mais clareza.

 

Esses exemplos mostram por que SQL avançado não é apenas um recurso técnico. Quando bem usado, ele aproxima a consulta da decisão de negócio.

Para revisar os conceitos de funções de janela em linguagem acessível, vale consultar também a referência da LearnSQL sobre o tema, sem depender de um banco de dados específico.

Conexão com o Bootcamp de Análise de Dados (Tekne)

No Bootcamp em Data Analytics & IA da Tekne, CTEs e funções de janela aparecem dentro de projetos práticos de análise de dados.

Ao longo da formação, o aluno aprende a estruturar consultas em etapas, organizar métricas de negócio e transformar resultados técnicos em leitura executiva. Assim, o SQL deixa de ser apenas extração de dados e passa a apoiar decisões com mais clareza.

Na prática, esse fluxo ajuda a construir análises mais completas: primeiro vem a preparação da base, depois entram as CTEs, em seguida aparecem as funções de janela e, por fim, a interpretação dos resultados.

Além disso, os exercícios reforçam habilidades importantes para quem trabalha com BI, dados, marketing, produto, vendas ou operações: ler uma pergunta de negócio, organizar a lógica da consulta, validar métricas e apresentar descobertas de forma compreensível.

Conclusão

CTEs e funções de janela são recursos importantes para quem quer avançar em SQL.

As CTEs ajudam a organizar o raciocínio da consulta em etapas. Já as funções de janela permitem criar rankings, acumulados, médias móveis, percentis e comparações sem perder o detalhe por linha.

Combinadas, elas tornam as análises mais legíveis, reduzem retrabalho e facilitam a revisão por outras pessoas do time.

Por isso, dominar esses recursos é um passo importante para quem deseja trabalhar melhor com dados e construir consultas mais úteis para o negócio.

Para praticar esse tipo de análise com orientação, o Bootcamp em Data Analytics & IA da Tekne aprofunda o uso de SQL em projetos aplicados e ajuda a transformar consultas em entregas de portfólio.

Pesquisar

Posts Recentes

Categorias