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

app_entity_240表基于id2分组重置Column C累计计算的SQL需求

修正后的SQL语句及问题分析

问题根源

原SQL存在三个核心问题:

  1. 未指定排序逻辑:MySQL不保证无ORDER BY时的行顺序,累计求和的依赖顺序无法保障,结果不可靠。
  2. 变量处理逻辑错误:原代码中@prev := id的赋值与判断顺序颠倒,且未针对id2进行分组判断。
  3. 分组累计未重置:当id2变化时,未将累计变量@sum重置为0,导致不同组之间的累计值延续。

修正后的SQL

SELECT 
    id2,
    id1,
    @sum := CASE 
        WHEN @prev_id2 = id2 THEN @sum + `[3645]`
        ELSE 0
    END AS `Column C`,
    @prev_id2 := id2
FROM (
    -- 必须先按id2、id1排序,保证同组行的处理顺序正确
    SELECT id2, id1, `[3645]`
    FROM app_entity_240
    ORDER BY id2, id1
) AS sorted_data
CROSS JOIN (
    SELECT @sum := 0, @prev_id2 := NULL
) AS params

逻辑说明

  1. 排序预处理:先将原表按id2(分组标识)和id1(组内顺序标识)排序,确保每组内的行按正确顺序处理。
  2. 变量初始化:初始化累计变量@sum为0,上一个分组标识@prev_id2为NULL,保证第一行触发重置逻辑。
  3. 分组累计判断:
    • 若当前行id2与上一行@prev_id2相同,则延续累计(@sum + [3645])。
    • 若id2发生变化,则重置累计值为0,开启新组的计算。

验证结果

修正后的SQL会输出符合期望的结果:

id 2id 1Column C
110
12100
13200
240
25200
26300

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:13:10