du kan lösa detta genom att skapa en tabell som kommer att innehålla 24 värden för timmar (00:00, 01:00 etc) och utföra en vänster (eller höger) sammanfogning med den och din tabell som tillåter nollvärden så att du kommer att ha alla 24 rader även om din tabell innehåller 0 rader alls, då borde gruppera efter fungera bra.
Glöm inte att trunkera allt utom timme från ditt bord när du gör gå med så resultatet av funktionen ringer och utför join on
kan vara lika med värdet av denna hjälptabell.
du kan använda följande fråga för att göra jobbet efter att ha fyllt i testtidstabellen med 24 test_time-värden
select test_time,sum(sign(coalesce(idFromYourTable,0))) as count from testtime
left join yourTable on test_time=hour(yourTableTime)
group by test_time
Detta kommer att ge 0 som count om det inte finns några värden som matchar raden från testtabellen, medan count(*) ger 24 rader med 1:or istället för 0:or även om din tabell är tom, även om det bara finns 1 rad i din tabell är omöjligt att skilja skillnaden mellan 0 rader eftersom resultaten kommer att se likadana ut för följande 2 olika rader
orsak kommer båda att ge samma resultat radantal lika med 1, medan summatekniken behandlar dessa rader på olika sätt