我正在尝试运行一个查询,该查询获取我的一个表中某列的累积总和。它看起来是这样的:
set @csum := 0;
select order_date, Amount, (@csum := @csum + Amount) as cumulative_sum
from Orders
order by order_date但是,在运行此命令时,我会得到cumulative_sum的所有空值。我做错了什么吗?谢谢!
发布于 2015-06-10 06:47:00
我建议你这样做:
select order_date, Amount, sum(Amount) as cumulative_sum
from Orders
order by order_date如果您需要将值存储在变量中,则可以这样做:
SELECT @Variable = sum(Amount)
from Orders如果您想每天计算金额的总和,可以添加一个GroupBy
发布于 2015-06-10 09:47:10
我猜想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;发布于 2018-09-17 23:20:19
从SQL8开始,比使用MySQL的特定于供应商的变量(并依赖于其计算的非声明性质)更好的方法是使用MySQL标准window functions。您的查询可以重写为:
SELECT
order_date,
amount,
sum(amount) OVER (ORDER BY order_date)
FROM orders
ORDER BY order_datehttps://stackoverflow.com/questions/30744002
复制相似问题