Mysql 我可以得到一个小时计数,包括没有数据的小时数吗?
我需要一种生成报告的方法,该报告显示每小时的事务数(或点击数)。到目前为止,我已经得到了如下表,但它跳过了没有数据的小时数 即使计数为0,是否有办法显示小时数Mysql 我可以得到一个小时计数,包括没有数据的小时数吗?,mysql,Mysql,我需要一种生成报告的方法,该报告显示每小时的事务数(或点击数)。到目前为止,我已经得到了如下表,但它跳过了没有数据的小时数 即使计数为0,是否有办法显示小时数 SELECT HOUR(`time`), Count(*) FROM `taps` WHERE DATE(`time`) = '2016-01-17' AND `readerid` IN (SELECT `readerid` FROM `readers` W
SELECT HOUR(`time`), Count(*)
FROM `taps`
WHERE DATE(`time`) = '2016-01-17' AND `readerid` IN
(SELECT `readerid`
FROM `readers`
WHERE `type` = 'A')
GROUP BY HOUR(`time`)
ORDER BY HOUR(`time`)
这将生成下表:是的,你可以 通过对同一个表使用左外部联接或右外部联接并对其使用别名,您可以选择空值,甚至根据查询中声明的条件为它们指定一个值 为了给出一个语法示例,请显示您的预期结果。 并提供您正在使用的表,我尝试复制,但没有找到在陷阱和读卡器之间建立关系的方法。假设您有所有小时的一些数据,那么您可以将查询表述为带有条件聚合的左连接:
SELECT HOUR(t.`time`), Count(r.readerid)
FROM tabs t left join
readers r
on r.readerid = t.readerid and r.type = 'A'
WHERE DATE(t.time) = '2016-01-17'
GROUP BY HOUR(t.time)
ORDER BY HOUR(t.time);
如果这不是真的,那么不知何故,你需要一个小时列表。一种方法是子查询:
SELECT h.hr, Count(r.readerid)
FROM (select 0 as hr union all select 1 union all . . .
select 23
) h left join
tabs t
on h.hr = hour(t.time) and
DATE(t.time) = '2016-01-17' left join
readers r
on r.readerid = t.readerid and r.type = 'A'
GROUP BY h.hr
ORDER BY h.hr;
还有其他方法可以生成小时列表。子查询是最通用的。谢谢@GordonLinoff!子查询是我去那里的路!一件事是,由于顺序的原因,它们出现的顺序是不可靠的。e、 g 0,1,10,11,12。。。。。2, 20, 21, 22@CallamThom . . . 不知何故,您将它们声明为字符串而不是整数。作为整数,它们将正确排序。