Window Function: SUM()

 

Olá friends, espero que estejam todos bem, a hora de nos encontrarmos nos eventos da comunidade esta chegando, que alegria dia 10 e 11 de dezembro podemos nos encontrar no treinamento da lenda do tuning, Fabiano Amorim. Bora nessa?


Bem, hoje gostaria de trazer a função SUM de forma diferente, que talvez algumas pessoas ainda não conheçam, podemos utilizar a função SUM como uma window Functions e acreditem isso é muito útil.

Vamos ao cenário:

Temos um banco de dados fictício de contas bancarias, essas contas recebem transações, saques, depósitos e transferências, imagine que gostaríamos de puxar a tela de extrato e verificar como estava o saldo do dia em determinada data? Um excelente cenário para utilizar a window functions SUM().


Temos essa tabela e precisamos fazer uma conta acumulativa, ou seja, temos que pegar linha a linha e somar com a soma acumulada das linhas anteriores, parece complexo, mas não é, vou primeiro mostrar como quero que a conta seja feita.



Abaixo explico a soma acumulada de linha a linha:


Agora vamos ao código:

Nessa nossa modelagem a coluna "tp_movimento" representa o movimento é uma entrada ou uma saída, então como fazer uma alteração para saber o real saldo, pois não podemos apenas somar, temos que inverter o sinal dos movimentos de saída, imagine que entrou 10 R$ na conta depois saiu 5 R$, se a gente apenas somar o saldo da pessoa, ele apenas vai crescer, imagine o desastre disso? rs
para resolver podemos fazer assim:  





Agora sim, temos o saldo real da pessoal, mas se quisermos ver mais de uma pessoa?
Opa, é só adicionar um CPF a mais na consulta:



Com certeza não hein, lembre-se do partition by, nesse caso devemos particionar a tabela por CPF e reiniciar a conta  a cada CPF, assim:




código:



Simples né? Por hoje é isso pessoal, tenho um caso bem legal onde resolvi uma consulta de BI de forma simples, quem sabe não mostro mais pra frente. Abraços :)


Comentários

Postagens mais visitadas deste blog

Tuning no Postgres utlizando View Materializada

Como realizei um tuning que caiu o tempo de execução de 8h para 7minutos!

Window Functions: Row_number()