如何 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 = 0
从 WHERE
移动到 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
谢谢:-)
取以下数据:
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 = 0
从 WHERE
移动到 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
谢谢:-)