入場者の数を時間帯ごとにグループ化して結果を出力したいとき、その時間帯に入場者がいない場合は0として表示したいです。
期待する結果は次の通りです。
時間帯 | 入場者数 |
---|---|
00:00 | 236 |
01:00 | 0 |
02:00 | 242 |
03:00 | 175 |
04:00 | 185 |
05:00 | 385 |
06:00 | 582 |
07:00 | 284 |
08:00 | 195 |
09:00 | 314 |
10:00 | 146 |
11:00 | 136 |
12:00 | 226 |
~ | ~ |
しかし01:00の部分が0(正確には1時帯のデータが存在しない)ため、
時間帯 | 入場者数 |
---|---|
00:00 | 236 |
02:00 | 242 |
03:00 | 175 |
04:00 | 185 |
05:00 | 385 |
06:00 | 582 |
07:00 | 284 |
08:00 | 195 |
09:00 | 314 |
10:00 | 146 |
11:00 | 136 |
12:00 | 226 |
~ | ~ |
のように01:00のデータだけ抜けてしまいます。
これを0として表示するにはどうしたらよいでしょうか?
以下条件になります。
テーブル名:admission_history
カラム名:datetime, データ型:DateTime
試したSQL
SQL
1SELECT 2 timeUnit, COUNT(*) 3FROM( 4 SELECT 5 datetime, 6 FORMAT(datetime, "HH:00") AS timeUnit 7 FROM 8 admission_history 9 ) AS table 10GROUP BY 11 timeUnit
これでは期待した結果にならないので、
あらかじめ時間帯を持っているテーブルtbl_timeUnitを作成し、
SQL
1SELECT 2 timeUnit, ISNULL(COUNT(*), 0) 3FROM( 4 SELECT 5 datetime, 6 FORMAT(datetime, "HH:00") AS timeUnit 7 FROM 8 admission_history 9 ) AS table 10RIGHT OUTER JOIN 11 tblTimeUnit ON b.timeUnit = tbl_timeUnit.timeUnit 12GROUP BY 13 timeUnit
としたところ、次のようになりました。
時間帯 | 入場者数 |
---|---|
NULL | 0 |
00:00 | 236 |
02:00 | 242 |
03:00 | 175 |
04:00 | 185 |
05:00 | 385 |
06:00 | 582 |
07:00 | 284 |
08:00 | 195 |
09:00 | 314 |
10:00 | 146 |
11:00 | 136 |
12:00 | 226 |
~ | ~ |
これを上記の期待する結果と同じようにするにはどうしたらよいですか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/10/24 08:13