2

我一直在谷歌搜索这个问题的答案,我相信这比我做的要容易,我想学习正确的方法来做到这一点。

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

这是它返回的内容:

+-------+----------+
| 计数 | 类型 |
+-------+----------+
| 32 | 确认 |
| 4 | 1天 |
+-------+----------+

这很好,但是今天还有第三种“类型”恰好有 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; 

我确定这只是我缺少的一些简单的东西。

4

2 回答 2

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; 

注意:我使用了 aLEFT JOIN代替,如1 type has many emails

于 2013-03-29T16:41:20.400 回答
0

如果我正确理解了这个问题,你难道不能假设如果你没有得到某种类型的记录,那是因为有 0 个条目吗?

于 2013-03-29T16:42:59.987 回答