Com a cláusula OVER você faz com que uma janela de registros passe por alguns cálculos.
Entenda por janela de registros como sendo uma quantidade de registros no qual o cálculo será realizado.
Ao contrário do GROUP BY, onde o retorno é de apenas uma linha para cada agrupamento realizado, com a cláusula OVER você consegue trabalhar no contexto do SELECT, ou seja, para cada registro da sua lista. Desta forma, você não precisa trabalhar com o GROUP BY e ainda tem como retorno o cálculo desejado.
Um exemplo de uso do OVER:
1 2 3 4 |
SELECT orderid, custid, val, SUM(val) OVER() AS Total, SUM(val) OVER(PARTITION BY custid) AS TotalPorCliente FROM Sales.OrderValues; |
Retorna os seguintes registros:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
orderid custid val Total TotalPorCliente ----------- ----------- ------------ ---------------- --------------- 10643 1 814.50 1265793.22 4273.00 10692 1 878.00 1265793.22 4273.00 10702 1 330.00 1265793.22 4273.00 10835 1 845.80 1265793.22 4273.00 10952 1 471.20 1265793.22 4273.00 11011 1 933.50 1265793.22 4273.00 10926 2 514.40 1265793.22 1402.95 10759 2 320.00 1265793.22 1402.95 10625 2 479.75 1265793.22 1402.95 10308 2 88.80 1265793.22 1402.95 10365 3 403.20 1265793.22 7023.98 ... (830 row(s) affected) |
Notem somatório das duas últimas colunas… O que o SQL fez foi exibir a soma em cada registro.
Se o OVER não existisse, você inevitavelmente precisaria realizar duas consultas: Uma para listar os registros individualmente e uma segunda com os totalizadores, usando o GROUP BY.
No próximo post vou falar sobre as funções de ranqueamento da cláusula OVER.
Até!