从一个MySQL表中选择,即使count为0,也返回计数(id)

时间:2013-03-29 16:38:07

标签: mysql join count group-by

我一直在谷歌搜索这个问题的答案,我确定它比我做的更容易,而且我想学习正确的方法来做到这一点。

我有一个表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; 

我确信这只是一件我想念的简单事。

2 个答案:

答案 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个条目吗?