如何从不同的表中减去列的总和?

Kam*_*nek 3 postgresql view

我有两个表:

  1. 提款:account_id+amount
  2. 奖品:account_id+amount

我想计算每个 的余额account,可能在VIEW.

我可以有两个查询:

SELECT account_id, SUM(amount) FROM prizes GROUP BY account_id
Run Code Online (Sandbox Code Playgroud)

这给了我每个帐户的总奖金,以及:

SELECT account_id, SUM(amount) FROM withdrawals GROUP BY account_id
Run Code Online (Sandbox Code Playgroud)

这给了我这些账户的所有提款。

现在,我想减去它们以返回我帐户的余额。创建这样的视图的最有效方法是什么?

And*_*y M 5

作为完全连接的替代方法,您可以使用UNION ALL将两个聚合集组合在一起,只有该withdrawals集将包含在否定结果中。然后,您将使用组合集作为派生表并account_id再次汇总每个金额:

SELECT
  account_id,
  SUM(amount) AS balance
FROM
  (
    SELECT
      account_id,
      SUM(amount) AS amount
    FROM
      prizes
    GROUP BY
      account_id

    UNION ALL

    SELECT
      account_id,
      -SUM(amount) AS amount
    FROM
      withdrawals
    GROUP BY
      account_id
  ) AS derived
GROUP BY
  account_id
;
Run Code Online (Sandbox Code Playgroud)

我不确定这个查询与完整连接解决方​​案相比如何,但对我来说它看起来足够简单,可以作为一个很好的起点。