2017-04-21 21 views
1

採取以下數據:如何LEFT JOIN一個表,取出SUM()或返回0與WHERE子句?

db.users 

id  name 
1  David 
2  James 
3  Mary 

db.payments 
amount user_id  paid 
5  1   0 
55  1   1 
94  1   1 
5  2   0 
55  2   1 
94  2   1 
5  2   0 
55  2   1 
94  2   1 

我想左連接付款表給用戶表和SUM(),其中支付= 0的量:

SELECT users.*, SUM(payments.amount) 
FROM users 
LEFT JOIN payments 
ON users.id = payments.user_id 
WHERE payments.paid = 0 
GROUP BY users.id 
ORDER BY users.id DESC 

的問題出現在那個'mary'(用戶3)沒有得到回報,因爲她在支付表中沒有任何記錄。這是下到WHERE子句檢查付費= 0.

我想如果沒有記錄返回0作爲總和。

任何想法如何做到這一點?

回答

3

移動謂詞payments.paid = 0WHEREON條款,如:

SELECT users.*, SUM(payments.amount) 
FROM users 
LEFT JOIN payments 
ON users.id = payments.user_id AND payments.paid = 0 
GROUP BY users.id 
ORDER BY users.id DESC 

如果將謂語WHERE條款LEFT JOIN成爲INNER JOIN英寸

+0

謝謝,這是伎倆......不知道爲什麼我沒有想到:P。現在我只需要進行優化。 – David

1

你必須put->總和(ISNULL(payment.amount,0))在查詢付款次數

SELECT users.*, SUM(isnull(payments.amount,0)) 
FROM users 
LEFT JOIN payments 
ON users.id = payments.user_id 
WHERE payments.paid = 0 
GROUP BY users.id 
ORDER BY users.id DESC 
1

試試這個: -

SELECT users.Id, users.name, SUM(case when paid=0 then amount else 0 end) as 
req_amt 
FROM users 
LEFT JOIN payments 
ON users.id = payments.user_id 
GROUP BY users.id,users.name 
ORDER BY users.id DESC 

感謝:-)

相關問題