首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >累计和,以SQL表示

问累计和,以SQL表示
EN

Stack Overflow用户
提问于 2015-06-10 06:34:38
回答 3查看 228关注 0票数 2

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

代码语言:javascript
复制
set @csum := 0;
select order_date, Amount, (@csum := @csum + Amount) as cumulative_sum
from Orders
order by order_date

但是,在运行此命令时,我会得到cumulative_sum的所有空值。我做错了什么吗?谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-06-10 06:47:00

我建议你这样做:

代码语言:javascript
复制
select order_date, Amount, sum(Amount) as cumulative_sum
from Orders
order by order_date

如果您需要将值存储在变量中,则可以这样做:

代码语言:javascript
复制
SELECT @Variable = sum(Amount)
from Orders

如果您想每天计算金额的总和,可以添加一个GroupBy

票数 1
EN

Stack Overflow用户

发布于 2015-06-10 09:47:10

我猜想Amount有时可能是NULL。试试这个版本:

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2018-09-17 23:20:19

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

代码语言:javascript
复制
SELECT
  order_date,
  amount,
  sum(amount) OVER (ORDER BY order_date)
FROM orders
ORDER BY order_date
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30744002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档