按id求和值,然后用结果更新另一个表



我有两个表:

  • 具有ID和Amount_due列的用户
  • 具有ID、billed_tennes、User_ID的票据

我需要按ID对账单表中的所有billed_tennes求和,并按ID更新用户的amount_due。

以下是我目前正在尝试的没有运气的

UPDATE users
SET amount_due = (SELECT SUM(billed_cents) FROM bills INNER JOIN users ON bills.user_id = users.id WHERE someConditions)
FROM bills
WHERE users.id = bills.user_id 

最有效的查询取决于未公开的细节。这在任何情况下都有效:

UPDATE users u
SET    amount_due = b.sum_cents
FROM   (
SELECT user_id, sum(billed_cents) AS sum_cents
FROM   bills
WHERE  <some conditions>  -- maybe can go here? (better if possible)
GROUP  BY 1
) b
WHERE  u.id = b.user_id 
-- AND <some conditions>     -- may have to go here?

此表单不涉及子查询中的表users(第二次(。

对于users上的选择性过滤器,在聚合之前添加回接并过滤可能更有效。

参见:

  • 使用引用主表的子查询进行更新
  • 带有JSON对象数组聚合的LEFT JOIN查询
  • 单个查询中的多个array_agg((调用

相关内容

  • 没有找到相关文章

最新更新