簡體   English   中英

SQL:來自兩個連接表的Sum值

[英]SQL: Sum values from two joined tables

我有表usersdepositswithdrawals ,我正在嘗試編寫查詢以獲得用戶平衡

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM