我需要统计每小时发生的操作次数。
我的数据库按操作的时间戳保存日志。
我明白我可以做一个
SELECT table.time COUNT(table.time) from table t group by t.time
然而,也有一段时间没有采取任何行动。例如,如果我在上午 8:00 期间有 10 个操作,在上午 9:00 期间没有操作,在上午 10:00 期间有 4 个操作,
该查询将返回:
8:00 10
10:00 4
跳过 9:00AM,因为它没有条目。
如何进行考虑 0 计数条目的查询。
我还需要按一周中的几天对条目进行相同的查询,但我认为通过回答第一个问题我可以轻松处理另一个问题。
提前致谢!
您可以通过创建一个包含 24 个小时值(00:00、01:00 等)的表并与其执行左(或右)连接来解决此问题,并且您的表允许空值,这样您将拥有所有 24 行,即使你的表总共包含 0 行,那么 group by 应该可以正常工作。
当您执行 join 时,不要忘记截断表中除小时之外的所有内容,以便您调用并执行 func 的结果join on
可以等于该帮助表的值。
在用 24 个 test_time 值填充 testtime 表后,您可以使用以下查询来完成这项工作
select test_time,sum(sign(coalesce(idFromYourTable,0))) as count from testtime
left join yourTable on test_time=hour(yourTableTime)
group by test_time
如果没有与测试表中的行匹配的值,这将提供 0 作为计数,而使用 count(*) 将提供 24 行,其中 1 而不是 0,即使您的表为空,而且如果您的表中只有 1 行无法区分 0 行之间的差异,因为以下 2 行不同的结果看起来相同
23 NULL
23 1
Cause 将提供相同的结果行数等于 1 ,而求和技术会以不同的方式处理这些行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)