如何编写SQL语句根据a、b两列的值计算累计加减的结果字段
前提说明
- 你的原始表必须存在一个可确定行顺序的字段(如自增ID、操作时间戳等),以下示例中统一用
sort_id指代该字段,你需要替换成自己表中实际的排序字段 - 方案基于你给出的「a、b两列总有一列为0,另一列非0」的规则设计
通用SQL方案(支持所有带窗口函数的数据库:MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)
核心逻辑是每一行的计算增量为a-b:a非0时b为0,增量等于a,实现累加a的效果;b非0时a为0,增量等于-b,实现减去b的效果,再通过累计求和窗口函数输出结果即可。
SELECT a, b, SUM(a - b) OVER (ORDER BY sort_id) AS result FROM 你的表名;
MySQL 5.x 低版本兼容方案(不支持窗口函数的场景)
通过用户自定义变量实现累计计算:
SET @result := 0; SELECT a, b, @result := @result + a - b AS result FROM 你的表名 ORDER BY sort_id;
内容的提问来源于stack exchange,提问作者Programmierkartoffel
相关产品推荐
相关产品推荐

