Funções de janela: OVER

Calcule sobre linhas sem recolhê-las. OVER define quais linhas considerar, como RANK e totais acumulados no Excel.

Sintaxe

ROW_NUMBER() OVER (ORDER BY column)
RANK() OVER (ORDER BY column)
SUM(column) OVER (PARTITION BY column ORDER BY column)
  • PARTITION BY reinicia o cálculo para cada grupo.
  • Diferente de GROUP BY, todas as linhas continuam no resultado.

Exemplo

SELECT order_id, RANK() OVER (ORDER BY order_date) AS day_rank FROM orders;

Cada pedido com sua posição por data. Pedidos do mesmo dia compartilham a posição.

Tabelas usadas: orders. Experimente em uma lição abaixo.

Erros comuns

  • ROW_NUMBER dá a cada linha um número diferente; RANK dá o mesmo número aos empates e pula os seguintes.
  • Funções de janela são executadas depois do WHERE, então você não pode usar os resultados delas no WHERE. Envolva a consulta em uma subconsulta ou em um WITH para filtrar por eles.

Pratique