如何 LEFT JOIN a table,将 SUM() 或 return 0 与 WHERE 子句一起使用?

how to LEFT JOIN a table, take the SUM() or return 0 with a WHERE clause?

取以下数据:

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

我想加入支付 table 给用户 table 和 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)没有得到 returned,因为她在付款 table 中没有任何记录。这取决于检查 paid = 0 的 WHERE 子句。

如果没有记录,我希望 return0 作为总和。

知道怎么做吗?

将谓词 payments.paid = 0WHERE 移动到 ON 子句,例如:

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

您必须在查询中输入-> sum(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

试试这个:-

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

谢谢:-)