можете да разрешите това, като създадете таблица, която ще съдържа 24 стойности за часове (00:00, 01:00 и т.н.) и извършите ляво (или дясно) присъединяване с нея и вашата таблица позволява нулеви стойности, така че ще имате всичките 24 реда, дори ако вашата таблица изобщо съдържа 0 реда, след което групирането по трябва да работи добре.
Не забравяйте да съкратите всичко освен час от вашата маса, когато изпълнявате присъединяване, така че в резултат на func извиквате и изпълнявате join on
може да бъде равно на стойността на тази помощна таблица.
можете да използвате следната заявка, за да свършите работата, след като попълните таблицата на testtime с 24 стойности на 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
Това ще осигури 0 като брой, ако няма стойности, съответстващи на ред от тестовата таблица, докато наличието на count(*) ще осигури 24 реда с 1s вместо 0s, дори ако таблицата ви е празна, също и ако има само 1 ред във вашата таблица е невъзможно да се разграничи разликата между 0 реда, защото резултатите ще изглеждат еднакви за следващите 2 различни реда
причината и двете ще предоставят еднакъв брой редове за резултат, равен на 1, докато техниката на сумиране третира тези редове по различен начин