我一直在谷歌搜索这个问题的答案,我确定它比我做的更容易,而且我想学习正确的方法来做到这一点。
我有一个表emails_sent
我正在选择计数和按列分组。每行有3 type
- “确认”,“1天”和“同一天”中的一行。我也是在某个约会时间做的。所以,让我们说,这是我今天选择的一个示例查询:
SELECT Count(id) AS count,
type
FROM emails_sent
WHERE Date_format(date, '%Y-%m-%d') = '2013-03-29'
GROUP BY type
ORDER BY type;
这就是它的回报:
+-------+---------+ | count | type | +-------+---------+ | 32 | confirm | | 4 | 1day | +-------+---------+
哪个好,但是还有第三个“类型”碰巧今天有0个记录,但我需要它来计算即使它是0的数量。
我还尝试创建一个仅包含3个“类型”的第二个表,并使用右连接,但它仍然不会拉0计数。这就是我对这两个表所做的事情:
SELECT t.type,
Count(s.id) AS count
FROM emails_sent s
RIGHT JOIN email_types t
ON s.type = t.type
WHERE Date_format(s.date, '%Y-%m-%d') = '2013-03-29'
GROUP BY t.type;
我确信这只是一件我想念的简单事。
答案 0 :(得分:1)
试试这个
SELECT t.type,
COALESCE( Count(s.id), 0 ) AS count
FROM email_types t
LEFT JOIN email_sent s
ON s.type = t.type
WHERE Date_format(s.date, '%Y-%m-%d') = '2013-03-29'
GROUP BY t.type;
注意:我使用LEFT JOIN
代替1 type has many emails
答案 1 :(得分:0)
如果我正确理解了这个问题,你难道不能假设如果你没有获得某种类型的记录那么那是因为有0个条目吗?