比较反对他们的交易和用户余额

比较反对他们的交易和用户余额

问题描述:

我有两个表:比较反对他们的交易和用户余额

(一)资产负债表中显示了每个用户的平衡

(二)具有借记交易表并为每个我需要检查,如果任何用户都有他/她在资产负债表的平衡,他/她的交易的交易表的总和之间的差异用户

的信用交易。

当我输入下面的查询:

select sum(transaction.credit)-sum(transaction.debit),balance.balance 
from transaction 
right join balance on balance.user_id = transaction.user_id 
where balance.balance <> sum(transaction.credit)-sum(transaction.debit) 
group by transaction.user_id 

我得到一个错误与消息“无效使用组功能”。但即使我删除了最后一行,我仍然得到相同的信息。

我在做什么错?

+0

第二点是,这个查询是绝对没用的,它并不能帮助您识别descrepancies。其结果将是一个以数字,但也没有办法为你确定是什么行这些数字actuallly从 – e4c5

+0

来到@因为OP在where子句中使用聚合函数本身提出的e4c5错误。 – Shadow

+0

哎呀@shadow,我想键入投影,而不是项目:) – e4c5

条件对聚合函数不应该把where子句中,但在having子句:

select  balance.user_id, 
      coalesce(sum(transaction.credit), 0) 
      - coalesce(sum(transaction.debit), 0) trans_balance, 
      balance.balance 
from  transaction 
right join balance 
     on balance.user_id = transaction.user_id 
group by balance.user_id 
having  balance.balance <> trans_balance 

注意,最好是group by balance.user_id因为可能没有匹配的transaction记录。你应该在这种情况下,也可以使用​​3210否则比较就会失败上null

+0

谢谢trincot。它像一个魅力工作! – TurboS

使用Having而不是Where条款

select transaction.user_id 
from transaction 
right join balance on balance.user_id = transaction.user_id 
group by transaction.user_id 
Having sum(transaction.credit)-sum(transaction.debit) <> balance.balance 
+0

感谢JaydipJ。然而,我在'having clause'中遇到了一个错误“Unknown column'balance.balance'”。 – TurboS