2015-06-09 164 views
0

我正在嘗試運行一個查詢,該查詢獲取我的一個表中某列的累積和。它看起來像這樣:SQL中的累積和

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

但是,運行此操作時,我得到cumulative_sum的所有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;