按日期计数和分组应该在没有值的情况下返回0

时间:2010-12-01 08:59:44

标签: mysql count group-by

我正在尝试报告我们每天的访谈次数。

所以我有一张采访表 比如

interviewid,STAFFID,日期,注释...

以及包含2005年至2020年所有日期的日期参考表。具有名为ref。

的单个日期字段

我的查询是:

SELECT count(*) as cnt FROM `interviews` 
right JOIN `dateRef` ON `date` = ref where type = 2 
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d')

显示我们所做的采访是否合适,但在我们没有进行任何采访时却没有...

例如,这会返回:

1
2
4

但它应该返回

0
1
0
2
0
4
0

编辑:

显然问题来自where子句,因为如果我删除它,查询工作正常......

2 个答案:

答案 0 :(得分:3)

尝试替换

right join

而不是

left join

另一个变化是

where type = 2 

where type = 2 OR type IS NULL

SO最终查询

SELECT count(*) as cnt FROM `interviews` 
right JOIN `dateRef` ON `date` = ref where (type = 2 OR type is null)
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d')

答案 1 :(得分:0)

如果我理解正确,type就是一栏采访。由于您使用了正确的联接,因此您的联接表包含没有采访的日期行,但这些行在NULL列(以及type的任何其他列)中都有interviews,因为没有interviews表中这些日期的条目。它们会被您需要WHERE的{​​{1}}条款过滤掉,这就是type=2看不到它们的原因。

您可以尝试COUNT之类的内容,至少WHERE (type=2 OR type IS NULL)永远不会interviews.type