[英]SQL: Sum values from two joined tables
我有表users
, deposits
和withdrawals
,我正在嘗試編寫查詢以獲得用戶平衡 。
desposits
id | amount | user_id
1 | 4000 | 1
2 | 3500 | 1
withdrawals
id | amount | user_id
1 | 4000 | 1
這是我目前的查詢:
SELECT u.id AS user_id,
COALESCE(SUM(d.amount), 0) AS sum_deposits,
COALESCE(SUM(w.amount), 0) AS sum_withdrawals
FROM users AS u
WHERE u.id = 1
LEFT JOIN deposits AS d ON u.id = d.user_id
LEFT JOIN withdrawals AS w ON u.id = w.user_id
GROUP BY u.id
我得到的結果是-500,我認為這是因為撤回計算兩次,如此: SUM(4000, 3500) - SUM(4000, 4000) = -500
如何修復查詢?
你應該使用子查詢
SELECT u.id AS user_id,
(SELECT COALESCE(SUM(d.amount), 0)
FROM deposits AS d WHERE u.id = d.user_id) AS sum_deposits,
(SELECT COALESCE(SUM(w.amount), 0)
FROM withdrawals AS w WHERE u.id = w.user_id) AS sum_withdrawals
FROM users AS u
WHERE u.id = 1
我會union all
而不是加入:
select user_id,
sum(case when trans_type = 'Deposit' then amount end) as sum_deposit,
sum(case when trans_type = 'Withdrawal' then amount *-1 end) as sum_Withdrawal,
sum(amount) as net_amount
from
(
select user_id, amount, 'Deposit' as trans_type
from Deposits
union all
select user_id, amount * -1, 'Withdrawal'
from Withdrawals
) t1
group by user_id
嘗試這個-
SELECT A.user_id, A.amount - B.amount Balance
FROM (
SELECT user_id,SUM(amount) amount
FROM desposits
GROUP BY user_id
) A
LEFT JOIN (
SELECT user_id,SUM(amount) amount
FROM withdrawals
GROUP BY user_id
)B ON A.User_id = B.user_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.