SQL中的累积和

时间:2015-06-09 22:34:38

标签: mysql sql

我正在尝试运行一个查询,该查询获取其中一个表中列的累积总和。它看起来像这样:

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

但是,运行此命令时,我会获得cumulative_sum的所有NULL。我做错了什么?谢谢!

3 个答案:

答案 0 :(得分:1)

我建议你这样做:

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

如果您需要将值存储在变量中,则可以执行以下操作:

SELECT @Variable = sum(Amount)
from Orders

如果您想要将每天的金额相加

,也可以添加GroupBy

答案 1 :(得分:1)

我猜我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;

答案 2 :(得分:0)

从MySQL 8开始,一种比使用MySQL的供应商特定变量(并依赖于其计算的非声明性)更好的方法是使用SQL标准window functions。您的查询可以这样重写:

SELECT
  order_date,
  amount,
  sum(amount) OVER (ORDER BY order_date)
FROM orders
ORDER BY order_date