Window Functions em SQL — PARTITION BY vs GROUP BY (Qual Usar Quando) A pergunta mais feita em interviews de analista de dados é: "qual é a diferença entre GROUP BY e Window Functions?" A resposta certa parece simples, mas muda tudo na forma como você escreve queries. O Problema Real GROUP BY retorna uma linha por grupo. Você perde o detalhe original. Window Functions retorna tantas linhas quanto você tinha, mas com o valor agregado calculado para cada grupo. Parece detalhe? Não é. GROUP BY — Quando Você Quer Resumir GROUP BY é para quando você quer apenas o resumo: Resultado: 5 linhas (uma por região) Cada linha = total de vendas daquela região Detalhes individuais de cada venda? Desapareceram. Uso: quando você quer relatório executivo, dashboard com KPIs, totalizações. Window Functions — Quando Você Quer Manter Detalhe Window Functions fazem a mesma coisa de agregação, mas mantêm todas as linhas originais: Resultado: 1000 linhas (uma para cada venda original) Cada linha mantém seus dados (order_id, sales) Mas agora tem também: total da região, rank dessa venda dentro da região Uso: quando você precisa classificar, rankear, comparar cada linha com a média do grupo, calcular variação. O Exemplo Prático Que Muda Tudo Você precisa fazer relatório de vendedores mostrando: Venda individual Total de vendas daquele vendedor naquele mês Percentual que essa venda representa Com GROUP BY? Impossível (você já resumiu). Com Window Functions? 1 query: Resultado: cada venda com contexto completo. Pronto para usar. Window Functions Mais Comuns (E Quando Usar) ROW_NUMBER() Retorna número sequencial, sem repetições. Uso: ranking, "top 10", paginação. RANK() vs DENSE_RANK() RANK pula números em empate. DENSE_RANK não pula. Uso: RANK para quando quer deixar claro quantas pessoas estão antes. DENSE_RANK para seqüências contínuas. LAG() / LEAD() Acessa valor da linha anterior ou próxima. Uso: variação mês a mês, detecção de anomalias, série temporal. SUM() / AVG() OVER Qualquer agregação com contexto. Uso: médias móveis, acumulados, comparação com período anterior. Performance: GROUP BY vs Window Functions Essa é a pergunta que todo júnior faz. Mito: "Window Functions são mais lentas." Realidade: depende. GROUP BY + Window Functions: ambas fazem 1 full scan. Performance similar. GROUP BY + múltiplas subqueries: aqui GROUP BY é mais lento. Benchmark real (1 milhão de registros): Conclusão: Window Functions são quase sempre mais rápidas quando você precisa manter detalhes. A Regra Prática GROUP BY: você quer 10 linhas de resumo Window Functions: você quer 1 milhão de linhas com agregação Aprenda Window Functions. Você usa 100x mais que GROUP BY no dia a dia. Dica Final A maioria dos analistas aprende GROUP BY e para. Isso é por que: GROUP BY é fácil de ensinar Window Functions parecem complicadas (não são, só parecem) Cursos de SQL focam em GROUP BY (é mais comum) Mas a verdade é: Window Functions é o que diferencia analista que escreve relatórios chatos de analista que resolve problema real. Comece praticando hoje. Segunda próxima você está usando em produção. Quer dominar SQL de verdade? Explore mais no Elite Data Academy — módulo SQL avançado com 30+ exercícios práticos em window functions.