Mysql SQL中的累积和
我正在尝试运行一个查询,以获取我的一个表中某一列的累积和。看起来是这样的:Mysql SQL中的累积和,mysql,sql,Mysql,Sql,我正在尝试运行一个查询,以获取我的一个表中某一列的累积和。看起来是这样的: set @csum := 0; select order_date, Amount, (@csum := @csum + Amount) as cumulative_sum from Orders order by order_date 但是,当运行此命令时,我会得到累积的_和的所有空值。我做错了什么吗?谢谢!我建议只做: select order_date, Amount, sum(Amount) as cumula
set @csum := 0;
select order_date, Amount, (@csum := @csum + Amount) as cumulative_sum
from Orders
order by order_date
但是,当运行此命令时,我会得到累积的_和的所有空值。我做错了什么吗?谢谢!我建议只做:
select order_date, Amount, sum(Amount) as cumulative_sum
from Orders
order by order_date
如果需要将值存储在变量中,则可以执行以下操作:
SELECT @Variable = sum(Amount)
from Orders
如果您想计算每天的金额,可以添加一个
GroupBy
,我猜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;
自MySQL 8以来,比使用MySQL的供应商特定变量(并依赖于其计算的非声明性性质)更好的方法是使用SQL标准。您的查询可以重写如下:
SELECT
order_date,
amount,
sum(amount) OVER (ORDER BY order_date)
FROM orders
ORDER BY order_date
为什么不直接将sum(Amount)作为累计总和……我突然想到,如果你没有明确声明
@csum
,它可能会被初始化为INT,而“Amount”可能是-什么,十进制?试试设置@csum:=0.0;
迈克K,100%正确。我怎么将它声明为INT(如果我不想要十进制)如果我不清楚,很抱歉。您提供的上述查询只会给出一行,对所有金额进行求和。我想要的是一段时间内的累积金额,因此如果金额为,1,5,7,10,则累积列应为1,6,13,23。