我正在尝试运行一个查询,该查询获取其中一个表中列的累积总和。它看起来像这样:
set @csum := 0;
select order_date, Amount, (@csum := @csum + Amount) as cumulative_sum
from Orders
order by order_date
但是,运行此命令时,我会获得cumulative_sum的所有NULL。我做错了什么?谢谢!
答案 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