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

MySQL按user_id和symbol分组求和更新到另一表的SQL问题求解

问题原因

你的SQL无法运行的核心问题是:SUM()属于聚合函数,需要先对records表按user_id、symbol分组后才能计算每个分组的金额总和,无法直接在UPDATE的SET子句中未分组的场景下调用。

解决方案

通用写法(兼容MySQL、PostgreSQL、SQL Server等绝大多数数据库)

通过关联子查询先计算对应分组的求和值再更新:

UPDATE calculation c
SET sumOfAmount = (
    SELECT SUM(amount) 
    FROM records r
    WHERE r.user_id = c.user_id 
      AND r.symbol = c.symbol
)
-- 可选:加下面的条件避免records中无匹配的记录被更新为NULL
WHERE EXISTS (
    SELECT 1 FROM records r 
    WHERE r.user_id = c.user_id AND r.symbol = c.symbol
);

MySQL专属优化写法

通过预聚合的临时表关联更新,执行效率更高:

UPDATE calculation c
INNER JOIN (
    SELECT user_id, symbol, SUM(amount) AS total_amount
    FROM records
    GROUP BY user_id, symbol
) r ON c.user_id = r.user_id AND c.symbol = r.symbol
SET c.sumOfAmount = r.total_amount;

新增+更新二合一写法(仅MySQL支持)

如果calculation表可能不存在对应user_id+symbol的记录,需要同时处理新增和更新场景,先给calculation表的user_id和symbol字段加联合唯一索引,再用以下语句:

INSERT INTO calculation (user_id, symbol, sumOfAmount)
SELECT user_id, symbol, SUM(amount)
FROM records
GROUP BY user_id, symbol
ON DUPLICATE KEY UPDATE sumOfAmount = VALUES(sumOfAmount);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:09:01