2015-06-09 2 views
0

Я пытаюсь запустить запрос, который получает кумулятивную сумму столбца в одной из моих таблиц. Это выглядит так:Совокупная сумма в SQL

set @csum := 0; 
select order_date, Amount, (@csum := @csum + Amount) as cumulative_sum 
from Orders 
order by order_date 

Однако при выполнении этого я получаю все NULL для кумулятивного_сума. Все, что я "делаю неправильно Спасибо

+0

Почему просто не делать сумму (сумма), как cumulative_sum .... – BrianAtkins

+0

Это происходит со мной, что если вы явно не объявлять '@ csum', это, вероятно, будет инициализирован как INT, и «Сумма» - вероятно, что, десятичное? Попробуйте 'set @csum: = 0.0;' –

+0

Mike K, 100% правильно. Как объявить его как INT (если бы я не хотел десятичных знаков) – user1072337

ответ

1

Я хотел бы предложить просто делать?!

select order_date, Amount, sum(Amount) as cumulative_sum 
from Orders 
order by order_date 

Если вам нужно сохранить значение в переменной, то вы можете сделать:

SELECT @Variable = sum(Amount) 
from Orders 

А может быть, добавьте GroupBy, если вы хотели бы суммировать суммы в день

+0

Извините, если я не был чист. Вышеуказанный запрос даст только одну строку, суммирующую все суммы. То, что я хочу, является суммарной суммой с течением времени, поэтому, если суммы были, 1, 5, 7, 10, кумулятивная колонка должна быть 1, 6, 13, 23. – user1072337

0

Я бы предположил, что Amount иногда может быть NULL. на:

select o.order_date, o.Amount, 
     (@csum := @csum + coalesce(o.Amount, 0)) as cumulative_sum 
from Orders o cross join 
    (select @csum := 0) params 
order by o.order_date; 
Смежные вопросы