je kunt dit oplossen door een tabel te maken die 24 waarden bevat voor uren (00:00, 01:00 enz.) en er een linker (of rechter) join mee uit te voeren en je tabel die nulls toestaat, zodat je alle 24 rijen hebt, zelfs als je tabel bevat helemaal 0 rijen, dan zou groeperen op moeten werken.
vergeet niet alles af te kappen behalve het uur van uw tabel wanneer u join uitvoert, dus resultaat van func die u aanroept en uitvoert join on
kan gelijk zijn aan de waarde van deze helptabel.
u kunt de volgende query gebruiken om het werk te doen na het invullen van de testtime-tabel met 24 test_time-waarden
select test_time,sum(sign(coalesce(idFromYourTable,0))) as count from testtime
left join yourTable on test_time=hour(yourTableTime)
group by test_time
Dit levert 0 op als telling als er geen waarden zijn die overeenkomen met de rij uit de testtabel, terwijl het hebben van count(*) 24 rijen zal opleveren met 1s in plaats van 0s, zelfs als uw tabel leeg is, ook als er slechts 1 rij in uw tabel is is onmogelijk om het verschil tussen 0 rijen te onderscheiden omdat de resultaten er hetzelfde uitzien voor de volgende 2 verschillende rijen
oorzaak zal beide hetzelfde resultaat opleveren rijtelling gelijk aan 1 , terwijl de somtechniek deze rijen anders behandelt