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

如何用SQL基于两列计算行累计值?Total_c表需求实现

解决方案:计算基于前一行结果的累计值

需求逻辑

c列的核心计算规则是:

  • 按bill分组、id排序,累计计算每行的(b - a),即当前行c值 = 所有之前行(含当前行)的(b - a)之和
  • 当累计值为负数时,格式化为绝对值+'-';非负数直接显示数值

实现SQL(支持窗口函数的数据库:MySQL 8.0+、PostgreSQL、SQL Server等)

SELECT
    id,
    bill,
    a,
    b,
    CASE
        WHEN cumulative >= 0 THEN CAST(cumulative AS CHAR)
        ELSE CONCAT(ABS(cumulative), '-')
    END AS c
FROM (
    SELECT
        id,
        bill,
        a,
        b,
        -- 按bill分组、id排序,累计计算(b - a)的总和
        SUM(b - a) OVER (PARTITION BY bill ORDER BY id) AS cumulative
    FROM Total_c
) AS sub_query;

说明

  1. 子查询中使用SUM(b - a) OVER (PARTITION BY bill ORDER BY id):
    • PARTITION BY bill:确保只在相同bill的组内计算累计
    • ORDER BY id:保证按id的顺序依次累计
  2. 外层查询通过CASE语句处理显示格式:
    • 累计值非负时直接转为字符串
    • 累计值为负时,取绝对值后拼接'-',得到类似6-的格式

测试结果

执行上述SQL后,将得到与需求完全一致的结果:

id   bill    a   b     c
  1     a     0   10    10 
  2     a     0   5     15 
  3     a     0   3     18
  4     a    11   0     7
  5     a    13   0     6-  
  6     a     2   2     6-

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:10:30