我有两张桌子:
(i)显示每个用户的余额的余额表
(ii)具有每个用户的借方和贷方交易的交易表
我需要检查是否有任何用户在余额表中的余额与他/她在交易表中的交易总和之间存在差异。
当我输入以下查询时:
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
我收到错误消息&#34;无效使用群组功能&#34;。但即使我删除了最后一行,我仍然得到相同的信息。
我做错了什么?
答案 0 :(得分:1)
使用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
答案 1 :(得分:0)
聚合函数的条件不应放在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
记录。在这种情况下,您应该使用coalesce
,否则null
上的比较将会失败。