如何在mysql中按组查找累积值?

Posted

技术标签:

【中文标题】如何在mysql中按组查找累积值?【英文标题】:How to find the cumulative value by group in mysql? 【发布时间】:2018-01-28 04:16:44 【问题描述】:

我有下表

   id_val date_val    volume_val
    1   26-Jan-18   100
    1   25-Jan-18   200
    1   24-Jan-18   300
    1   23-Jan-18   150
    2   26-Jan-18   250
    2   25-Jan-18   350
    2   24-Jan-18   400
    3   23-Jan-18   500

我需要通过 id 估计累积量。这就是我想要的

id_val date_val    volume_val     cumulative_volume_val
1   26-Jan-18       100             100
1   25-Jan-18       200             300
1   24-Jan-18       300             600
1   23-Jan-18       150             750
2   26-Jan-18       250             250
2   25-Jan-18       350             600
2   24-Jan-18       400             1000
3   23-Jan-18       500             500

这是我尝试过的,但它不起作用。它总结了一切,不按组划分。我该如何改进它?

set @csum := 0;  

select id_val, date_val,   
(@csum := @csum + volume_val) as cumulative_volume      
from temp  
group by id_val, date_val    
order by id_val, date_val desc 

【问题讨论】:

你没有聚合函数,所以你的 group by 子句是没有根据的 如需进一步帮助,请参阅meta.***.com/questions/333952/… 【参考方案1】:

这是我根据类似问题的答案改编而来的解决方案:Does mysql have the equivalent of Oracle's "analytic functions"?

select id_val, date_val,   
(case when @id_val != id_val then @sum := volume_val else @sum := @sum + volume_val end) as cumulative_volume,
(case when @id_val != id_val then @id_val := id_val else @id_val end) as _
FROM (SELECT * FROM temp ORDER BY id_val, date_val desc) z
JOIN (SELECT @sum := 0) s
JOIN (SELECT @idval := -1) i

【讨论】:

谢谢。但这不会编译 SQL 中有几个拼写错误;我更正的查询在 MySQL 5.7.20 中编译

以上是关于如何在mysql中按组查找累积值?的主要内容,如果未能解决你的问题,请参考以下文章

在具有重复行的 SQL Server 表中按组查找行号

如何在 Oracle 中按组填写缺失的日期

如何在 R 的列表中按组获取平均值

如何在ggplot的箱线图中按组绘制平均值

在大熊猫DataFrame中按组删除异常值的更快方法[重复]

如何在JqGrid中按组显示每行的行数