puede resolver esto creando una tabla que contendrá 24 valores para las horas (00:00, 01:00, etc.) y realice una combinación izquierda (o derecha) con ella y su tabla que permita valores nulos para que tenga las 24 filas incluso si su tabla contiene 0 filas, entonces agrupar por debería funcionar bien.
No olvide truncar todo menos la hora de su tabla cuando realice la unión, de modo que el resultado de la función sea llamar y realizar join on
puede ser igual al valor de esta tabla de ayuda.
puede usar la siguiente consulta para hacer el trabajo después de completar la tabla de tiempo de prueba con 24 valores de tiempo de prueba
select test_time,sum(sign(coalesce(idFromYourTable,0))) as count from testtime
left join yourTable on test_time=hour(yourTableTime)
group by test_time
Esto proporcionará 0 como conteo si no hay valores que coincidan con la fila de la tabla de prueba, mientras que contar (*) proporcionará 24 filas con 1 en lugar de 0 incluso si su tabla está vacía, también si solo hay 1 fila en su tabla es imposible distinguir la diferencia entre 0 filas porque los resultados se verán iguales para las siguientes 2 filas diferentes
causa ambos proporcionarán el mismo recuento de filas de resultados igual a 1, mientras que la técnica de suma trata estas filas de manera diferente