Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL中的累积和_Mysql_Sql - Fatal编程技术网

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。