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

如何编写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的分组数据:
    1. 通过SUM(deposit_amount)得到该分组的总存款额,减去50后得到剩余总额
    2. 用COUNT(*)获取该分组的记录条数,将剩余总额均分得到每条记录应更新的金额
  • 通过JOIN将原表与计算结果关联,仅对comp_id=1的记录执行更新,其他分组的记录保持不变

原语句问题分析

你之前的UPDATE语句中,子查询(SELECT SUM(deposit_amount) - 50)没有与外部更新的记录关联,导致每条comp_id=1的记录都会被直接设置为总存款额减50(而非均分后的值),这和你想要的逻辑不符。上面的语句通过分组计算均分金额,确保每条记录得到的是总扣减后的平均数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:21