将用户余额与其交易总额进行比较

时间:2016-10-03 12:48:27

标签: mysql group-by

我有两张桌子:

(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;。但即使我删除了最后一行,我仍然得到相同的信息。

我做错了什么?

2 个答案:

答案 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上的比较将会失败。