MySQL临时表新增BALANCE列并实现累计余额计算问题咨询
问题1:为临时表新增BALANCE字段
使用ALTER TABLE语句即可完成字段新增,字段类型建议和原表AMOUNT字段保持一致,假设AMOUNT为DECIMAL(10,2)类型,示例语句如下:
ALTER TABLE add_balance ADD COLUMN BALANCE DECIMAL(10,2) DEFAULT 0 COMMENT '累计余额';
如果不清楚AMOUNT的字段定义,可以先执行DESC add_balance;查询后对应调整即可。
问题2:写入累计余额数值
根据你使用的MySQL版本,有两种实现方案:
方案1:MySQL 8.0及以上版本(支持窗口函数,推荐)
用开窗函数SUM() OVER()实现累加,注意必须明确排序规则,通常按日期升序、同日期按ID升序保证累加顺序正确:
UPDATE add_balance t1 JOIN ( SELECT ID, SUM(AMOUNT) OVER (ORDER BY DATE ASC, ID ASC) AS calc_balance FROM add_balance ) t2 ON t1.ID = t2.ID SET t1.BALANCE = t2.calc_balance;
方案2:MySQL 5.x版本(不支持窗口函数)
使用用户自定义变量实现累加:
SET @balance := 0; UPDATE add_balance SET BALANCE = (@balance := @balance + AMOUNT) ORDER BY DATE ASC, ID ASC;
注意:UPDATE语句后的
ORDER BY是必填项,否则累加顺序会混乱,导致余额计算错误。
内容的提问来源于stack exchange,提问作者Jose Borges
相关产品推荐
相关产品推荐

