比较反对他们的交易和用户余额
我有两个表:比较反对他们的交易和用户余额
(一)资产负债表中显示了每个用户的平衡
(二)具有借记交易表并为每个我需要检查,如果任何用户都有他/她在资产负债表的平衡,他/她的交易的交易表的总和之间的差异用户
的信用交易。
当我输入下面的查询:
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
我得到一个错误与消息“无效使用组功能”。但即使我删除了最后一行,我仍然得到相同的信息。
我在做什么错?
条件对聚合函数不应该把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
。
谢谢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
感谢JaydipJ。然而,我在'having clause'中遇到了一个错误“Unknown column'balance.balance'”。 – TurboS
第二点是,这个查询是绝对没用的,它并不能帮助您识别descrepancies。其结果将是一个以数字,但也没有办法为你确定是什么行这些数字actuallly从 – e4c5
来到@因为OP在where子句中使用聚合函数本身提出的e4c5错误。 – Shadow
哎呀@shadow,我想键入投影,而不是项目:) – e4c5