You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求MySQL累加查询语句:按ID分组累加每日earnings字段值

解决MySQL分组累计收益求和问题

嘿,这需求我熟,就是要给每个Id计算从第一天到当前日期的累计收益对吧?下面给你两种实用的MySQL写法,适配不同版本的数据库:

方法一:使用窗口函数(MySQL 8.0+ 推荐)

这是最简洁高效的方式,利用MySQL 8.0新增的窗口函数直接实现分组滚动求和:

SELECT 
    Id,
    record_date,
    earnings,
    SUM(earnings) OVER (PARTITION BY Id ORDER BY record_date) AS sum_of_earnings_per_day
FROM 
    你的表名 -- 替换成实际表名
ORDER BY 
    Id, record_date;

代码说明:

  • PARTITION BY Id:按Id将数据分组,确保只计算同一个Id下的累计值
  • ORDER BY record_date:指定分组内的排序依据,保证按日期顺序累加
  • SUM(earnings) OVER (...):窗口函数会自动计算当前组内从第一条记录到当前行的earnings总和

方法二:关联子查询(兼容MySQL 5.x及更早版本)

如果你的MySQL版本不支持窗口函数,可以用关联子查询实现相同效果:

SELECT 
    t1.Id,
    t1.record_date,
    t1.earnings,
    (SELECT SUM(t2.earnings) 
     FROM 你的表名 t2 
     WHERE t2.Id = t1.Id 
       AND t2.record_date <= t1.record_date) AS sum_of_earnings_per_day
FROM 
    你的表名 t1
ORDER BY 
    t1.Id, t1.record_date;

代码说明:

  • 通过自关联表,筛选出与当前行Id相同且日期小于等于当前行的所有记录
  • 对子查询中的earnings求和,得到从第一天到当前日期的累计值

验证结果

用你提供的样例数据测试,两种方法都会返回符合预期的结果:

Idrecord_dateearningssum_of_earnings_per_day
209772019-11-22-0.1737-0.1737
209772019-11-23-0.4867-0.6604
209772019-11-241.39610.7357
209772019-11-25-1.0450-0.3093
209772019-11-261.66391.3546

内容的提问来源于stack exchange,提问作者dev coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:48:27