2015-06-09 129 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;