Cláusula OVER

A cláusula OVER permite a realização de cálculos complexos sobre um conjunto de linhas de dados.

Esta cláusula define uma janela ou conjunto de linhas dentro do resultado de uma consulta, sobre o qual as funções de janela podem operar.


Sintaxe básica

A sintaxe básica da cláusula OVER é a seguinte:

OVER (
    [PARTITION BY coluna]
    [ORDER BY coluna [ASC|DESC]]
    [ROWS|RANGE entre]
)
  • A cláusula PARTITION BY é opcional e serve para dividir o conjunto de resultados em partições distintas, baseando-se nos valores de uma coluna especificada.
  • A cláusula ORDER BY também é opcional e determina a ordem das linhas dentro de cada partição.
  • As cláusulas ROWS e RANGE definem o conjunto de linhas a ser considerado antes e depois da linha atual para os cálculos da função de janela.


Exemplo

Pode-se utilizar OVER para calcular totais acumulados, médias móveis, ou para determinar a classificação de elementos dentro de uma partição específica do conjunto de dados.

Um exemplo prático de utilização da cláusula OVER seria calcular a soma acumulativa das vendas para cada produto.

SELECT ProductID, OrderQty, SUM(OrderQty) 
OVER (PARTITION BY ProductID ORDER BY SalesOrderID) as CumulativeSum
FROM Sales.SalesOrderDetail;

A cláusula OVER pode ser utilizada com várias funções de janela, como ROW_NUMBER, RANK, DENSE_RANK, NTILE, SUM, AVG, MIN, MAX, entre outras.




Documentação oficial da Microsoft