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

MySQL 5.6中实现列累计求和及衍生值计算的方法(已尝试变量未成功)

解决MySQL 5.6累计求和及衍生计算问题

你的需求是计算quantity 1和total 1的累计值,再通过累计total除以累计quantity得到value summ,原SQL存在字段名未转义、变量未初始化、累计逻辑不完整等问题,以下是修正后的方案:

关键问题说明

  1. 带空格的字段名必须用反引号包裹(比如quantity 1、total 1),否则MySQL无法识别。
  2. MySQL 5.6不支持窗口函数,需用用户变量实现累计,且必须初始化变量,同时指定明确的行排序规则(否则累计结果无意义)。
  3. 需同时维护累计quantity和累计total两个变量,再基于这两个累计值计算value summ。

修正后的SQL语句

假设你的表有一个用于排序的字段(比如id,确保行顺序符合你的累计逻辑),执行以下语句:

SET @sum_quantity = 0;
SET @sum_total = 0;

SELECT 
    `quantity 1`,
    `value 1`,
    `total 1`,
    @sum_quantity := @sum_quantity + `quantity 1` AS `sum quantity`,
    @sum_total := @sum_total + `total 1` AS `sum total`,
    ROUND(@sum_total / @sum_quantity, 4) AS `value summ`
FROM your_table
ORDER BY id; -- 替换为你实际的排序列(如时间、自增ID等)

执行结果示例

以你提供的数据为例,执行后会得到符合预期的结果:

quantity 1value 1total 1sum quantitysum totalvalue summ
803.8304803043.8000
403.751501204543.7833
403.81521606063.7875

单语句初始化变量的写法

如果不想单独执行SET语句,可以用子查询完成变量初始化:

SELECT 
    `quantity 1`,
    `value 1`,
    `total 1`,
    @sum_quantity := @sum_quantity + `quantity 1` AS `sum quantity`,
    @sum_total := @sum_total + `total 1` AS `sum total`,
    ROUND(@sum_total / @sum_quantity, 4) AS `value summ`
FROM your_table, (SELECT @sum_quantity := 0, @sum_total := 0) AS init
ORDER BY id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:37:08