新・SQL入門編16ドリルのサムネイル
クロス集計表を作ってみよう 1 MySQL編(paizaランク C 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

注文履歴が ordered テーブルに保存されています。
ordered テーブルの形式は次の通りです。

#カラム名データ型内容
1ordered_id整数 (int)注文の通し番号
2datetime日時 (datetime)注文がおこなわれた日時
3bill整数 (int)注文の合計金額


注文が行われた時間を行に、合計金額の価格帯を列に持つクロス集計表で注文の件数を集計してください。

  • 時間帯の取得にはDATE_FORMAT(datetime,"%k時台") AS 時間帯を利用してください。
  • 価格帯は500円未満500円以上1000円未満1000円以上の3つとしてください。


デフォルトコードにある4つのカッコ内を埋めて回答してください。

ヒント



  • CASE WHEN 条件 THEN 値 END:条件に応じてカラムの値を変えることができる
  • WHEN 条件 THEN 値の句は同じCASE式内に複数書くことができる
  • WHEN句の後にELSE 値と続けることで、それまでの条件に合わなかった場合の値を設定できる


  • FROM句内のサブクエリを使います。少なくとも時間帯billのカラムが必要になります。
  • CASE式を利用して列持ちでの集計を行います。それぞれのCASE式について、条件を満たしている場合は1、そうでない場合は0に設定すればよいです。

入力例1
ordered テーブル
ordered_iddatetimebill
12021-12-17 9:31200
22021-12-17 9:46250
32021-12-17 10:91050
.........
出力例1
時間帯 500円未満 500円以上1000円未満 1000円以上
9時台 2 0 0
10時台 3 4 6
11時台 2 16 9
...

問題一覧へ戻る

  1. paizaトップ
  2. レベルアップ問題集
  3. 新・SQL入門編16ドリル(言語選択)
  4. 問題一覧 MySQL編
  5. クロス集計表を作ってみよう 1 MySQL編
ページの先頭へ戻る