mysql使用sum的列来获取每个组的总金额

时间:2017-12-18 14:19:17

标签: mysql sql group-by sum running-total

这是表订单中的数据。

有没有人可以帮我做统计工作?

-------------------------------
id  | order_amount | createtime
-------------------------------
1   |    10        | 1513605522
2   |    20        | 1513605523
3   |    30        | 1513605524
4   |    40        | 1513605525
-------------------------------
这是我需要的输出
-------------------------------
 total_income | createtime
-------------------------------
    10        | 1513605522
    30        | 1513605523
    60        | 1513605524
   100        | 1513605525
-------------------------------
这是我的sql语句,它没有给我我想要的东西。

select sum(order_amount) as total_income from order group by create time;

BTW。有可能产生输出.... 任何帮助对我来说意义重大。非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用:

set @amt := 0;
select @amt := @amt + order_amount as total_income, createtime
from order
order by createtime asc;

答案 1 :(得分:0)

在MySQL中,您可以使用相关子查询来执行此操作:

select o.*,
       (select sum(o2.order_amount)
        from orders o2
        where o2.createtime <= o.createtime
       ) as running_amount
from orders o;

使用非标准SQL的另一个选择是使用变量:

select o.*, (@s := @s + o.order_amount) as running_amount
from (select o.*
      from orders o
      order by createtime
     ) o cross join
     (select @s := 0) params;

请注意,子查询仅在更新版本的MySQL中需要。

实际上,MySQL 8.0 最终支持窗口函数,因此可以使用该版本中的标准SQL来完成:

select o.*, sum(o.order_amount) over (order by o.createtime) as running_amount
from orders o;