条件を満たす注文番号を取得しよう MySQL編(paizaランク C 相当)
問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
問題
下記の問題をプログラミングしてみよう!
※ この問題集は、動画講座『新・SQL入門編3: WHERE句を理解しよう』で学習した内容について反復して練習できるドリルです。分からないことがあれば、動画に戻って復習してみてください。
注文内容が ordered_menu テーブルに保存されています。
ordered_menu テーブルの形式は次の通りです。
# | カラム名 | データ型 | 内容 |
---|
1 | ordered_id | 整数 (int) | 注文の通し番号 |
2 | menu_id | 整数 (int) | メニュー番号 |
3 | num | 整数 (int) | メニューの注文数 |
4 | sum | 整数 (int) | 小計 |
注文履歴が ordered テーブルに保存されています。
ordered テーブルの形式は次の通りです。
# | カラム名 | データ型 | 内容 |
---|
1 | ordered_id | 整数 (int) | 注文の通し番号 |
2 | datetime | 日時 (datetime) | 注文がおこなわれた日時 |
3 | bill | 整数 (int) | 注文の合計金額 |
メニューが menu テーブルに保存されています。
menu テーブルの形式は次の通りです。
# | カラム名 | データ型 | 内容 |
---|
1 | menu_id | 整数 (int) | メニュー番号 |
2 | category_id | 整数 (int) | カテゴリ番号 |
3 | name | 文字列 (varchar) | メニュー名 |
4 | price | 整数 (int) | 価格 |
先月まで
フライドポテトL
の販売数が、3 ヵ月連続で落ちていることがわかりました。
実は
フライドポテトL
は
フライドポテトM
とほとんど量が変わらないにもかかわらず、
フライドポテトM
より価格が 50 円高いため、
フライドポテトL
が売れたほうが嬉しいです。
そこで、次の【 条件 】をどちらも満たした注文をしてくれたお客さんにクーポンを渡すキャンペーンを実施しました。
キャンペーンがどれほど好評だったかを調べるために、クーポンを受け取ったお客さんの注文番号を、注文番号の昇順に並べ替えてすべて取得してください。
【 条件 】
・注文時刻が
2021-12-17 12:00:00
から
2021-12-17 12:59:59
の間でないこと(あまりクーポンが出すぎると困るため)
・
フライドポテトL
を注文するか、
フライドポテトM
を
2
個以上注文すること(
フライドポテトM
でも
2
個以上買ってくれたら嬉しいため)
注文時刻や、メニューの情報は次の通りです。
SELECT ordered_id, datetime FROM ordered WHERE datetime < "2021-12-17 12:00:00" ORDER BY datetime DESC LIMIT 1;
ordered_id datetime
42 2021-12-17 11:59:00
SELECT ordered_id, datetime FROM ordered WHERE datetime > "2021-12-17 12:59:59" ORDER BY datetime LIMIT 1;
ordered_id datetime
76 2021-12-17 13:00:00
SELECT menu_id, name FROM menu WHERE name = "フライドポテトM" OR name = "フライドポテトL";
menu_id name
11 フライドポテトM
12 フライドポテトL
※ 注文番号は連番です。
※ もし、1 回の注文で
フライドポテトL
を
1
個以上と、
フライドポテトM
を
2
個以上注文するようなものがあった場合でも、注文番号の重複を除去することはせず、2 つ出力してください。
回答形式
ordered_id
ordered_id_1
...
ordered_id_n
- 出力例1
-
ordered_id
6
25
38
...
問題一覧へ戻る