MySQL Query用于获取每小时的计数

Len*_*kus 5 mysql

我需要计算每小时发生的动作次数.

我的数据库按操作的时间戳记记录日志.

我明白我能做到

SELECT table.time COUNT(table.time) from table t group by t.time
Run Code Online (Sandbox Code Playgroud)

但是,有一段时间没有采取任何行动.例如,如果我在上午8:00期间有10个操作,则在上午9:00期间没有操作,在上午10:00期间没有4个操作,

该查询将返回:

8:00    10
10:00   4
Run Code Online (Sandbox Code Playgroud)

跳过上午9:00,因为它没有条目.

如何进行将考虑0计数条目的查询.

我还需要按星期几来对条目进行相同的查询,但我认为通过回答第一个问题,我可以轻松处理另一个问题.

提前致谢!

Val*_*zub 4

您可以通过创建一个包含 24 个小时值(00:00、01:00 等)的表并与其执行左(或右)连接来解决此问题,并且您的表允许空值,这样您将拥有所有 24 行,即使你的表总共包含 0 行,那么 group by 应该可以正常工作。

当您执行联接时,不要忘记截断表中除小时之外的所有内容,以便您调用和执行的函数的结果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
Run Code Online (Sandbox Code Playgroud)

如果没有与测试表中的行匹配的值,这将提供 0 作为计数,而使用 count(*) 将提供 24 行,其中 1 而不是 0,即使您的表为空,而且如果您的表中只有 1 行无法区分 0 行之间的差异,因为以下 2 行不同的结果看起来相同

23 空
23 1

Cause 将提供相同的结果行计数等于 1 ,而求和技术会以不同的方式处理这些行