2016-10-03 58 views
1

我有兩個表:比較反對他們的交易和用戶餘額

(一)資產負債表中顯示了每個用戶的平衡

(二)具有借記交易表併爲每個我需要檢查,如果任何用戶都有他/她在資產負債表的平衡,他/她的交易的交易表的總和之間的差異用戶

的信用交易。

當我輸入下面的查詢:

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

回答

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記錄。你應該在這種情況下,也可以使用​​3210否則比較就會失敗上null

+0

謝謝trincot。它像一個魅力工作! – TurboS

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 
+0

感謝JaydipJ。然而,我在'having clause'中遇到了一個錯誤「Unknown column'balance.balance'」。 – TurboS