OVER, PARTITION BY, ORDER BY
Entenda o modelo de funções de janela: OVER, PARTITION BY (agrupamento), ORDER BY (ordenação) e como ele difere de GROUP BY.
OVER, PARTITION BY, ORDER BY é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
O que é uma Função de Janela?
Uma função de janela calcula um valor em um conjunto de linhas relacionadas à linha atual — sem reduzir o resultado como GROUP BY faz. Você mantém todas as linhas AND obtém uma coluna agregada.
Exemplo Básico
Média do total dos pedidos em toda a tabela, em cada linha:
SELECT id, total,
AVG(total) OVER () AS avg_total
FROM orders;Cláusula OVER
A cláusula OVER (...) define a janela. Parênteses vazios significam "todo o conjunto de resultados".
SELECT id, total,
SUM(total) OVER () AS grand_total
FROM orders;PARTITION BY: Agrupando a Janela
Como GROUP BY, mas as linhas não são reduzidas:
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;
-- Every order keeps its row; user_total is the same for all of one user's orders.ORDER BY na Janela
ORDER BY dentro de OVER define a ordenação das linhas para cálculos cumulativos:
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;
-- Running total per user, ordered by date.Janela vs GROUP BY
Comparação lado a lado:
-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;
-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id)
FROM orders;Cada Linha, um Quadro Diferente
O "quadro" é o conjunto de linhas dentro da partição que a função examina. O quadro padrão com ORDER BY é "do início até a linha atual" — é isso que produz os totais cumulativos.
Janelas Nomeadas
Se várias funções compartilham uma janela, dê um nome a ela uma única vez:
SELECT id, user_id, total,
SUM(total) OVER w AS running_sum,
AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);A Maioria das Agregações Funciona como Função de Janela
COUNT, SUM, AVG, MIN, MAX — todas podem ser usadas em uma janela. Funções de janela especializadas incluem ROW_NUMBER, RANK, LAG/LEAD, NTILE etc.
Funções de Janela são Executadas Depois de WHERE
Ordem lógica: FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT. Portanto, WHERE filtra antes que as janelas sejam calculadas.
Considerações de Desempenho
Funções de janela exigem ordenação (ou um hash). Para partições grandes, um índice nas colunas (partição, ordenação) evita a etapa de ordenação.
Recapitulação
Funções de janela adicionam valores agregados por linha.
- OVER () = resultado inteiro
- PARTITION BY = agrupa a janela
- ORDER BY na janela = habilita cálculos cumulativos
Verificação rápida
O que SUM(x) OVER (PARTITION BY user_id) calcula?
Perguntas Frequentes
A aula “OVER, PARTITION BY, ORDER BY” é grátis?
Sim — o texto completo de “OVER, PARTITION BY, ORDER BY” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “OVER, PARTITION BY, ORDER BY”?
Entenda o modelo de funções de janela: OVER, PARTITION BY (agrupamento), ORDER BY (ordenação) e como ele difere de GROUP BY. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “OVER, PARTITION BY, ORDER BY”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD e padrões de séries temporais
- Totais acumulados e médias móveis