Este é um post rápido e bastante auto-explicativo, penso que você não terá problemas – se tiver, pode comentar ou mandar um e-mail -, mas com um conteúdo bastante útil: soma cumulativa no SQL!
É útil porque vai te ajudar a entender também como funciona o OVER+_+PARTITION BY, uma ferramenta bastante interessante quando combinada com outras funções. O objetivo aqui é simples, você tem uma tabela e quer adicionar uma coluna com a soma de um campo numérico. Porém, essa coluna deverá ir acumulando valores do campo que está sendo somado.
Primeiro, montamos nossa tabela:
CREATE TABLE base ( Id int, Nome varchar(50), Sobrenome varchar(50), Estado varchar(2), Gastos decimal, Data_Compra date ); INSERT INTO base VALUES (152, 'Andre', 'Silva', 'MG', 351.50, '2018-01-22'), (222, 'Andre', 'Toledo', 'SP', 250.10, '2018-05-15'), (451, 'Carlos', 'Pinheiro', 'MG', 455.00, '2017-02-05'), (897, 'Juliana', 'Oliveira', 'MG', 150.50, '2017-03-01'), (852, 'Maria', 'Lima', 'MG', 325.90,NULL), (NULL,NULL, 'Pereira', 'MG', 332.59, '2018-05-25'), (105535, 'Vanessa', 'Costa', 'SP', 241.57, '2017-04-30');
Agora, vamos fazer duas coisas para assimilar o entendimento do conteúdo. Primeiro, vamos criar uma coluna com a soma dos gastos acumulada por estado:
SELECT *, SUM(Gastos) OVER (PARTITION BY Estado order by Id, Estado) AS cum_amt FROM base;
E, por fim, vamos criar somente a soma cumulativa de forma geral. Note que aqui não temos como utilizar o PARTITION BY, por isso decidi fazer de outra forma. Uni a tabela com ela mesma, trazendo na sua segunda versão a soma sempre através da linha seguinte:
select t1.id, t1.Gastos, SUM(t2.Gastos) as sum from base t1 inner join base t2 on t1.id >= t2.id group by t1.id, t1.Gastos order by t1.id
Gostou do conteúdo? Se inscreva para receber as novidades! Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e compartilhar com seus amigos. De verdade, isso faz toda a diferença. Você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato.
Bons estudos!