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

MySQL按时间条件统计AR列累计值填充对应列求助

前提说明

累计求和要求行的先后顺序是可确定的,建议先给你的表增加一个自增主键字段id,用来明确排序规则,避免结果出现乱序。

MySQL 8.0+ 方案(推荐,语法更易理解)

使用窗口函数实现分组累计求和,代码如下:

SELECT 
  `Time`,
  AR,
  CASE WHEN `Time` = '01:00' THEN SUM(AR) OVER (PARTITION BY `Time` ORDER BY id) ELSE 0 END AS `1`,
  CASE WHEN `Time` = '02:00' THEN SUM(AR) OVER (PARTITION BY `Time` ORDER BY id) ELSE 0 END AS `2`,
  CASE WHEN `Time` = '03:00' THEN SUM(AR) OVER (PARTITION BY `Time` ORDER BY id) ELSE 0 END AS `3`
FROM 你的表名
ORDER BY id;

逻辑说明:PARTITION BY Time会将相同时间的行分为一组,ORDER BY id保证按行的插入顺序累加,CASE判断当前行时间匹配时返回累计值,否则返回0。

MySQL 5.x 兼容方案

如果使用不支持窗口函数的低版本MySQL,可以用用户变量实现:

SELECT 
  `Time`,
  AR,
  CASE WHEN `Time` = '01:00' THEN @sum1 := @sum1 + AR ELSE 0 END AS `1`,
  CASE WHEN `Time` = '02:00' THEN @sum2 := @sum2 + AR ELSE 0 END AS `2`,
  CASE WHEN `Time` = '03:00' THEN @sum3 := @sum3 + AR ELSE 0 END AS `3`
FROM 你的表名, (SELECT @sum1 := 0, @sum2 := 0, @sum3 := 0) AS init_var
ORDER BY id;

逻辑说明:初始化三个变量分别记录三个时间点的累计和,遍历行时如果匹配对应时间就累加变量,否则返回0。

注意事项

  • 数字作为列名时需要用反引号(`)包裹,避免MySQL识别为常量抛出语法错误。
  • 如果你没有使用自增id作为排序依据,需要替换ORDER BY后的字段为能唯一确定行先后顺序的字段组合,否则累计结果会不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:36:08