クロス集計表を作ってみよう 4 MySQL編(paizaランク C 相当)
問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
問題
下記の問題をプログラミングしてみよう!
注文履歴が ordered テーブルに、注文内容が ordered_menu テーブルに、メニューが menu テーブルに保存されています。
テーブルの形式は次の通りです。
ordered
| # | カラム名 | データ型 | 内容 |
|---|
| 1 | ordered_id | 整数 (int) | 注文の通し番号 |
| 2 | datetime | 日時 (datetime) | 注文がおこなわれた日時 |
| 3 | bill | 整数 (int) | 注文の合計金額 |
ordered_menu
| # | カラム名 | データ型 | 内容 |
|---|
| 1 | ordered_id | 整数 (int) | 注文の通し番号 |
| 2 | menu_id | 整数 (int) | メニュー番号 |
| 3 | num | 整数 (int) | メニューの注文数 |
| 4 | sum | 整数 (int) | 小計 |
menu
| # | カラム名 | データ型 | 内容 |
|---|
| 1 | menu_id | 整数 (int) | メニュー番号 |
| 2 | category_id | 整数 (int) | カテゴリ番号 |
| 3 | name | 文字列 (varchar) | メニュー名 |
| 4 | price | 整数 (int) | 価格 |
時間帯を行に、メニューのカテゴリ番号を列に持つクロス集計表で注文数の合計を集計してください。
- 時間帯の取得には
DATE_FORMAT(datetime,"%k時台") AS 時間帯を利用してください。
- メニューのカテゴリ番号は1~4の整数です。
ヒント
CASE WHEN 条件 THEN 値 END:条件に応じてカラムの値を変えることができる
- WHEN句の後に
ELSE 値と続けることで、それまでの条件に合わなかった場合の値を設定できる
- FROM句内のサブクエリを使います。
- 出力例1
-
時間帯 バーガー サイドメニュー デザート ドリンク
9時台 0 1 0 1
10時台 14 9 3 16
11時台 37 19 12 27
...
問題一覧へ戻る