これを解決するには、時間(00:00、01:00など)の24の値を含むテーブルを作成し、それと左(または右)結合を実行し、テーブルがnullを許可するため、24行すべてがテーブルに0行が含まれている場合、groupbyは正常に機能するはずです。
結合を実行するときは、テーブルから1時間以外のすべてを切り捨てることを忘れないでください。そのため、関数の結果として、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(*)を使用すると、テーブルが空の場合でも、テーブルに1行しかない場合でも、0ではなく1で24行が提供されます。 0行の違いを区別することは不可能です。これは、次の2つの異なる行の結果が同じように見えるためです
causeは両方とも1に等しい同じ結果行数を提供しますが、sumテクニックはこの行を異なる方法で処理します