vous pouvez résoudre ce problème en créant une table qui contiendra 24 valeurs pour les heures (00h00, 01h00, etc.) et effectuer une jointure gauche (ou droite) avec elle et votre table autorisant les valeurs nulles afin que vous ayez les 24 lignes même si votre tableau contient 0 lignes du tout, alors le regroupement par devrait fonctionner correctement.
N'oubliez pas de tronquer tout sauf l'heure de votre table lorsque vous effectuez une jointure, donc le résultat de la fonction que vous appelez et effectuez join on
peut être égal à la valeur de cette table d'aide.
vous pouvez utiliser la requête suivante pour faire le travail après avoir rempli la table testtime avec 24 valeurs test_time
select test_time,sum(sign(coalesce(idFromYourTable,0))) as count from testtime
left join yourTable on test_time=hour(yourTableTime)
group by test_time
Cela fournira 0 comme nombre s'il n'y a pas de valeurs correspondant à la ligne de la table de test, tandis que le nombre (*) fournira 24 lignes avec des 1 au lieu de 0 même si votre table est vide, également s'il n'y a qu'une seule ligne dans votre table. est impossible de distinguer la différence entre 0 lignes car les résultats seront identiques pour suivre 2 lignes différentes
cause fournira à la fois le même nombre de lignes de résultat égal à 1 , tandis que la technique de somme traite ces lignes différemment