我正在寻找this question对面的解决方案。
我想将tableA自行连接为tableB,因此where子句不会影响tableB结果。
我想用cancel_date ='0000-00-00'获得所有客户和客户总数的总和
我不想切换表tableA和tableB的位置。我有基于tableA的其他where
和select
语句。
SELECT
count(tableA.client_id) as c_total,
count(tableB.client_id) as all_c_total
FROM (tableA) LEFT JOIN tableA tableB ON tableA.client_id = tableB.client_id
WHERE tableA.`cancel_date` = '0000-00-00'
GROUP BY month(tableA.purch_date)
ORDER BY month(tableA.purch_date)
结果应如下所示:
---------------------
c_total | all_c_total
---------------------
251 | 273
45 | 65
12 | 15
23 | 29
答案 0 :(得分:0)
您可以使用RIGHT JOIN
,并将条件移出WHERE
子句进入连接条件...
SELECT
count(t1.client_id) as c_total,
count(t2.client_id) as all_c_total
FROM tableA t1
RIGHT JOIN tableA t2
ON t1.client_id = t2.client_id
AND t1.`cancel_date` = '0000-00-00'
GROUP BY month(t1.purch_date)
ORDER BY month(t1.purch_date)
但是......我建议您重新考虑,切换表格的顺序,然后使用LEFT JOIN
。与LEFT JOIN
相比,RIGHT JOIN
被认为风格更好,更具可读性。