レッツアウトプット

問題文  

概要  

あなたは企業の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%]

解説  

  1. 内部結合とは DBテーブルの概要図を元に解説します。

    今回使用するテーブルは wokersalesのテーブル利用します。
    内部結合(Inner Join)を利用するための共通部分が必要になります。今回はwokerテーブルidsalesテーブルのwokerIDが同一の値であり結合条件として内部結合を行います。内部結合の例select ○○○ from テーブル1 INNER JOIN テーブル名2 ON 結合条件
  2. SQLの抽出条件 SQLでのある特定のデータを抽出する際にはいくつか方法があります。今回はwhereを利用した抽出について解説します。
    基本的な使い方select ○○○ from ○○○ where 条件 条件の指定方法については
    カラム名 演算子 数値などの条件 となっています。
    また、andorを組み合わせることで複数の条件を指定することが可能です。
  3. 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 となります。
  4. CSVファイルへの出力 Bashにてsudo mysql -u root -p -D Business -e "3.SQL文"> 〇〇.csv

注意点  

今回の場合、2つのミスが多かったです。1つは期間をしているが、営業部 の指定を正しく行っていない、その場合は20%となります。もう一つはWorker.IDSales.WorkerIDを見つけ結合条件とすることができるのかという点になります。こちらをWorker.IDSales.IDとした場合は正しく結合できていない、つまり問題文と成り立たなくなるため0%となります。