Cláusulas de quadro: ROWS vs RANGE
Escolha entre as cláusulas de quadro ROWS BETWEEN e RANGE BETWEEN e entenda como cada uma trata duplicatas e lacunas.
Cláusulas de quadro: ROWS vs RANGE é 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.
A moldura dentro de OVER
Uma função de janela avalia uma moldura — um subconjunto de linhas da partição. A moldura é definida por:
OVER (
PARTITION BY ...
ORDER BY ...
ROWS BETWEEN <start> AND <end> -- or RANGE BETWEEN ...
)Moldura padrão
Se você especificar ORDER BY, mas não especificar uma moldura, o padrão será:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-- "From the first row up to all rows tied with the current row".ROWS conta fisicamente
ROWS conta N linhas na ordem da partição, independentemente do valor:
SUM(x) OVER (ORDER BY day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- The current row plus the previous 2. Exactly 3 rows.RANGE conta por valor
RANGE conta as linhas cujo valor de ORDER BY esteja dentro de uma janela em torno do valor atual:
SUM(x) OVER (
ORDER BY day
RANGE BETWEEN INTERVAL '2 days' PRECEDING AND CURRENT ROW
)
-- All rows within 2 days (by calendar) of the current row.Por que a diferença é importante
Se houver lacunas nos dados, ROWS e RANGE produzirão respostas diferentes:
-- Days: 1, 3, 5 (no 2 or 4)
-- ROWS BETWEEN 2 PRECEDING AND CURRENT ROW for day 5: rows 1,3,5 = 3 days
-- RANGE BETWEEN INTERVAL '2 days' PRECEDING for day 5: only days 3,5 = 2 daysMoldura GROUPS (PG 11+)
GROUPS conta grupos de pares (empates em ORDER BY), em vez de linhas individuais:
SUM(x) OVER (
ORDER BY tier
GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
)
-- "The current tier and the previous tier" — useful when ORDER BY has many ties.Limites da moldura
UNBOUNDED PRECEDING— primeira linha da partiçãon PRECEDINGCURRENT ROWn FOLLOWINGUNBOUNDED FOLLOWING— última linha
Total acumulado
Somar desde o início até aqui:
SUM(x) OVER (ORDER BY day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
-- Same as the default frame.Janela retrospectiva
A média retrospectiva de N dias:
AVG(revenue) OVER (
ORDER BY day
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7dJanela centralizada
Observar os dois lados:
AVG(revenue) OVER (
ORDER BY day
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centred_7dSurpresa de LAST_VALUE
LAST_VALUE com a moldura padrão retorna a linha atual, não a última linha da partição. Use uma moldura ilimitada explícita:
LAST_VALUE(name) OVER (
PARTITION BY group ORDER BY day
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)Cláusula EXCLUDE (PG 11+)
Ignorar determinadas linhas da moldura:
SUM(x) OVER (
ORDER BY day
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
EXCLUDE CURRENT ROW
)
-- All previous 6 days but not today.Recapitulação
As cláusulas de moldura oferecem controle preciso sobre as janelas.
- ROWS — contagem de linhas físicas
- RANGE — intervalo baseado em valores
- GROUPS — grupos de pares
- A moldura padrão pode causar surpresas — seja explícito
Verificação rápida
Você tem receita diária com dias ausentes. Qual moldura fornece "todas as linhas dentro dos 7 dias corridos anteriores a agora"?
Perguntas Frequentes
A aula “Cláusulas de quadro: ROWS vs RANGE” é grátis?
Sim — o texto completo de “Cláusulas de quadro: ROWS vs RANGE” é 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 “Cláusulas de quadro: ROWS vs RANGE”?
Escolha entre as cláusulas de quadro ROWS BETWEEN e RANGE BETWEEN e entenda como cada uma trata duplicatas e lacunas. 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 “Cláusulas de quadro: ROWS vs RANGE”?
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
- Cláusulas de quadro: ROWS vs RANGE
- Lag/Lead com janelas de quadro
- Agrupamento em faixas com NTILE e Cume_Dist
- Padrões de relatórios do mundo real