puoi risolverlo creando una tabella che conterrà 24 valori per ore (00:00, 01:00 ecc.) ed esegui un join sinistro (o destro) con essa e la tua tabella consentendo valori null in modo da avere tutte le 24 righe anche se la tua tabella contiene 0 righe, quindi il raggruppamento per dovrebbe funzionare correttamente.
Non dimenticare di troncare tutto tranne l'ora dal tuo tavolo quando esegui join, quindi risultato di func chiami ed esegui join on
può essere uguale al valore di questa tabella di aiuto.
puoi utilizzare la seguente query per eseguire il lavoro dopo aver popolato la tabella testtime con 24 valori 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
Questo fornirà 0 come conteggio se non ci sono valori corrispondenti alla riga dalla tabella di test, mentre avere count(*) fornirà 24 righe con 1s invece di 0 anche se la tua tabella è vuota, anche se c'è solo 1 riga nella tua tabella è impossibile distinguere la differenza tra 0 righe perché i risultati saranno gli stessi per le seguenti 2 righe diverse
la causa fornirà entrambi lo stesso conteggio delle righe del risultato uguale a 1 , mentre la tecnica della somma tratta queste righe in modo diverso