【发布时间】:2013-03-20 09:40:23
【问题描述】:
我一直在谷歌搜索这个问题的答案,我确信它比我做的更容易,我想学习正确的方法。
我有一个表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;
我确定我缺少的只是一些简单的东西。
【问题讨论】:
-
无法向不存在的查询添加行。 SQL 方面的唯一解决方案是拥有一个包含您期望的所有值的表,并加入该表。一种解决方案可能是选择类型的所有唯一值,然后将其连接到子查询聚合函数。