新・SQL入門編16ドリルのサムネイル
ラッキーメニュー MySQL編(paizaランク C 相当)

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

問題

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

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

ordered

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


ordered_menu
#カラム名データ型内容
1ordered_id整数 (int)注文の通し番号
2menu_id整数 (int)メニュー番号
3num整数 (int)メニューの注文数
4sum整数 (int)小計



各時間帯で特定のメニューを注文した人にグッズをプレゼントするキャンペーンを実施しています。この日の対象メニューのメニュー番号は81321の3つです。各時間帯ごとに通し番号が最も大きい注文が当選します。時間帯を行に、対象メニューを列に持つクロス集計表の形で各時間帯・各メニューの当選した注文番号を出力してください。


  • 時間帯の取得にはDATE_FORMAT(datetime,"%k時台") AS 時間帯を利用してください。
  • 対象メニューの注文がなかった時間帯は当選者なしとし、注文番号の代わりに-1を出力してください。


ヒント



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


  • CASE式を対象に取る集計関数に適切なものを選びましょう。
  • FROM句内のサブクエリを使います。

入力例1
ordered テーブル
ordered_iddatetimebill
12021-12-17 9:31200
22021-12-17 9:46250
32021-12-17 10:91050
.........
ordered_menu テーブル
ordered_idmenu_idnumsum
1141200
2211250
381350
............
出力例1
時間帯 menu_id=8 menu_id=13 menu_id=21
9時台 -1 -1 2
10時台 3 -1 -1
11時台 39 27 28
...

問題一覧へ戻る

  1. paizaトップ
  2. レベルアップ問題集
  3. 新・SQL入門編16ドリル(言語選択)
  4. 問題一覧 MySQL編
  5. ラッキーメニュー MySQL編
ページの先頭へ戻る