レッツアウトプット
問題文
概要
あなたは企業のICT専門の職員として働いている。
人事部から “2019年1月1日から2019年12月31日までの営業部売り上げランキングを調べたい” とのメール依頼を受け作業している。WebサーバにMySQLを運用している。
MySQLのデータベースからcsvファイル(re.csv)を出力するSQL文(SQL.txt)を作成し実行しなさい。
初期状態
- MySQLが起動しroot権限にて正常動作することを確認している
- 使用するデータベースは
Business
である - データベースBusinessのテーブルには以下がある
- Department(部署)
- Payment(給与)
- Sales(売り上げ)
- Worker(従業員)
終了状態
- 提出されたCSVデータは売り上げ(Moneyカラム)の順位にソートされている
- 提出時に付随するカラムは以下の通り
- Worker ID
- Name f
- Name p
- DepartmentID
- Date
- Money
提出方法
- CSV形式で出力されたデータ(re.csv)と使用したSQL文(SQL.txt)で提出する
- ファイルを解答フォームにてドラッグアンドドロップを行いアップロードを行う
採点基準
- 上記のカラムが表示できるSQL文を作成できている。[40%]
- 正しく出力できている。[40%]
- 売り上げ1位から順表示ができている。[20%]
解説
- 内部結合とは DBテーブルの概要図を元に解説します。
今回使用するテーブルはwoker
とsales
のテーブル利用します。
内部結合(Inner Join)を利用するための共通部分が必要になります。今回はwoker
テーブルid
とsales
テーブルのwokerID
が同一の値であり結合条件として内部結合を行います。内部結合の例select ○○○ from テーブル1 INNER JOIN テーブル名2 ON 結合条件
- SQLの抽出条件 SQLでのある特定のデータを抽出する際にはいくつか方法があります。今回は
where
を利用した抽出について解説します。
基本的な使い方select ○○○ from ○○○ where 条件
条件の指定方法についてはカラム名
演算子
数値などの条件
となっています。
また、and
やor
を組み合わせることで複数の条件を指定することが可能です。 - SQLの実行 1・2よりSQL文を作成すると
select Worker.ID,Name_f,Name_p,DepartmentID,Date,Money from Worker inner join Sales on Worker.ID=Sales.WorkerID where DepartmentID=1 and Date>='2019-1-1' and Date<='2019-12-31' order by Money DESC
となります。 - CSVファイルへの出力 Bashにて
sudo mysql -u root -p -D Business -e "3.SQL文"> 〇〇.csv
注意点
今回の場合、2つのミスが多かったです。1つは期間をしているが、営業部
の指定を正しく行っていない、その場合は20%となります。もう一つはWorker.ID
=Sales.WorkerID
を見つけ結合条件とすることができるのかという点になります。こちらをWorker.ID
=Sales.ID
とした場合は正しく結合できていない、つまり問題文と成り立たなくなるため0%となります。