備品は何処へ

問題文

問題文は以下の通りでした。

概要

あなたは現在、自社の備品を管理する部署に勤務している。管理システムはとても古くMySQLを利用している。
ある日、上司から特定の製造会社のパソコン(Manufacturing_company_E)、特定の建物(HQ)で相性が悪く交換するためリストを作成してほしいと依頼を受ける。なお、注文会社はパソコンの管理を行う専門会社である。
MySQLのデータベースからcsvファイル(submit.csv)を出力するSQL文(submit.sql)を作成し実行しなさい。

初期状態とゴール

初期状態

  • MySQLが起動しroot権限にて正常動作することを確認している
  • 使用するデータベースはListである
  • データベースListのテーブルには以下がある
    • Equipment_list(備品リスト)
    • Order_company_list(注文会社リスト)
    • Manufacturing_company_list(製造会社リスト)
    • Location_list(所在地リスト)

終了状態

  • 提出されたCSVデータは値段(priceカラム)の高い順位にソートされている
  • 提出時に付随するカラムは以下の通り
    • Equipment_list.ID
    • Equipment_list.Name
    • Order_company_list.Name
    • Manufacturing_company_list.Name
    • Equipment_list.Price

解説

本問題は、複数のテーブルから必要な情報を結合し情報を出力できるかという問題です。今回は2つ以上のデータを取得するため余分なデータを表示させたくないため内部結合を利用します。

内部結合の仕方としては

select * from テーブル名1 INNER JOIN テーブル名2 ON 結合条件

となります。

今回は、Equipment_listのIDを各テーブルのIDと結合させ表示、そして条件に合わせて検索、ソートを行うという問題でした。

回答例

select Equipment_list.ID,Equipment_list.Name,Order_company_list.Name,Manufacturing_company_list.Name,Equipment_list.Date,Equipment_list.Price  from Equipment_list 
inner join Order_company_list on Equipment_list.Order_company= Order_company_list.ID
inner join Manufacturing_company_list on Equipment_list.Manufacturing_campany = Manufacturing_company_list.ID
inner join Location_list on Equipment_list.Use_place = Location_list.ID
where Manufacturing_company_list.ID=5 and Location_list.ID<=5
order by Price DESC
$(sudo) mysql -u root -p -D List -e " select Equipment_list.ID,Equipment_list.Name,Order_company_list.Name,Manufacturing_company_list.Name,Equipment_list.Price  from Equipment_list inner join Order_company_list on Equipment_list.Order_company= Order_company_list.ID inner join Manufacturing_company_list on Equipment_list.Manufacturing_company = Manufacturing_company_list.ID inner join Location_list on Equipment_list.Use_place = Location_list.ID where Manufacturing_company_list.ID=5 and Location_list.ID<=5 order by Price DESC;" |sed 's/\t/,/g'> re.csv
$cat re.csv
ID,Name,Name,Name,Price
24,pc_x,Order_company_E,Manufacturing_company_E,1600
17,pc_q,Order_company_J,Manufacturing_company_E,800

解説は以上です。

採点基準

  • 上記のカラムが表示できるSQL文を作成できている。[40%]
  • 正しく出力できている。[20%]
  • 売り上げ1位から順表示ができている。[40%]

講評

問題環境にてテーブル内の一部のカラム名のスペルが正しくなく、混乱を招いてしまいましたことをお詫び申し上げます。

SQLの問題でしたが、これを機にSQLの知識を思い出して頂けましたら幸いです。

解答について

終了状態で定義したカラムではないもの、または定義していたものに加え余計なカラムを提出していた解答が散見されました。

終わりに

この度は本問題を解いて頂き、ありがとうございました。