如何编写MySQL Update语句实现按comp_id均分扣减金额?
解决方案:将comp_id=1的总存款扣减后均分至对应记录
要实现你需要的逻辑——先计算comp_id=1的总存款额扣减50,再均分到该分组的所有记录中,可以使用带JOIN的UPDATE语句,结合子查询完成计算:
UPDATE deposit d JOIN ( SELECT comp_id, (SUM(deposit_amount) - 50) / COUNT(*) AS new_deposit_amount FROM deposit WHERE comp_id = 1 GROUP BY comp_id ) AS comp_calc ON d.comp_id = comp_calc.comp_id SET d.deposit_amount = comp_calc.new_deposit_amount WHERE d.comp_id = 1;
逻辑说明
- 子查询
comp_calc专门计算comp_id=1的分组数据:- 通过
SUM(deposit_amount)得到该分组的总存款额,减去50后得到剩余总额 - 用
COUNT(*)获取该分组的记录条数,将剩余总额均分得到每条记录应更新的金额
- 通过
- 通过JOIN将原表与计算结果关联,仅对comp_id=1的记录执行更新,其他分组的记录保持不变
原语句问题分析
你之前的UPDATE语句中,子查询(SELECT SUM(deposit_amount) - 50)没有与外部更新的记录关联,导致每条comp_id=1的记录都会被直接设置为总存款额减50(而非均分后的值),这和你想要的逻辑不符。上面的语句通过分组计算均分金额,确保每条记录得到的是总扣减后的平均数值。
内容的提问来源于stack exchange,提问作者Omnigospel
相关产品推荐
相关产品推荐

