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

按ID汇总Bills表金额并更新Users表Amount_due字段

解决方法

你的SQL问题出在两个地方:

  1. 子查询里重复关联了Users表,且未和外层的Users行绑定,导致子查询返回的是所有符合条件的账单总和,而非单个用户的对应总和
  2. UPDATE的语法格式不符合标准写法,不同数据库的UPDATE JOIN语法存在差异

下面分两种常用数据库给出正确写法:

1. MySQL 写法

用UPDATE JOIN直接关联汇总后的账单数据:

UPDATE users u
JOIN (
    SELECT user_id, SUM(billed_cents) AS total_billed
    FROM bills
    -- 在此处添加你的筛选条件 WHERE someConditions
    GROUP BY user_id
) b ON u.id = b.user_id
SET u.amount_due = b.total_billed;

2. 通用写法(适用于PostgreSQL、SQL Server等)

用子查询关联,确保每个用户匹配自己的账单总和:

UPDATE users
SET amount_due = (
    SELECT SUM(billed_cents)
    FROM bills
    WHERE bills.user_id = users.id
    -- 在此处添加你的筛选条件 AND someConditions
)
-- 可选:若只想更新有账单记录的用户,保留以下条件
WHERE EXISTS (
    SELECT 1 FROM bills WHERE bills.user_id = users.id
);

补充说明

  • 若要更新所有用户(包括无账单的用户,这类用户的amount_due会被设为NULL),可去掉最后的WHERE EXISTS子句
  • 将someConditions替换为你实际的筛选条件,比如时间范围、账单状态等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:10:29