0Pricing
SQL Academy · Aula

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 days

Moldura 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ção
  • n PRECEDING
  • CURRENT ROW
  • n FOLLOWING
  • UNBOUNDED 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_7d

Janela centralizada

Observar os dois lados:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centred_7d

Surpresa 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

  1. Cláusulas de quadro: ROWS vs RANGE
  2. Lag/Lead com janelas de quadro
  3. Agrupamento em faixas com NTILE e Cume_Dist
  4. Padrões de relatórios do mundo real
← Voltar para SQL Academy