不同表的两列相减

Nel*_*rre 6 sql postgresql sum aggregate-functions subtraction

我有两个不相关的表:

contribution(id,amount, create_at, user_id)

solicitude(id, amount, create_at, status_id, type_id, user_id)
Run Code Online (Sandbox Code Playgroud)

我需要减去用户的贡献金额和关心金额的总和,但结果不能是负数。

我怎样才能做到这一点?函数还是查询?
我尝试了这个查询:

SELECT  sum(contribution.amount)
- (SELECT sum(solicitude.amount) 
   FROM solicitude 
   WHERE user_id = 1 AND status_id = 1) as total
FROM contribution 
WHERE contribution.user_id = 1
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 2

我将您的评论解释but that result can't to be negative为要求返回 0 而不是负结果。简单的解决方案是GREATEST()

SELECT GREATEST(sum(amount)
      - (SELECT sum(amount)
         FROM   solicitude 
         WHERE  status_id = 1
         AND    user_id = 1), 0) AS total
FROM   contribution
WHERE  user_id = 1;
Run Code Online (Sandbox Code Playgroud)

否则,我保留了你原来的查询,这很好。

对于其他可能导致无法返回任何行的情况,我将替换为两个子选择。但是聚合函数的使用保证了结果行,即使user_id根本没有找到给定的结果行。比较:

如果减法的结果是NULL(因为没有找到行或者总和是NULL),GREATEST()也将返回0