Datawhale-MySQL-任務五

TNTZS666發表於2019-03-03

資料匯入匯出

將Excel檔案匯入MySQL表

  • 首先根據我們需要的欄位在MySQL中建立出表employees
    在這裡插入圖片描述
  • 在視覺化介面Navicat for MySQL中操作,滑鼠右鍵點選我們建立的表,選擇匯入嚮導,在彈窗中選擇Excel檔案,點選下一步。
    在這裡插入圖片描述
  • 之後選擇我們需要匯入的Excel檔案,點選下一步繼續
    在這裡插入圖片描述
  • 這邊目標表選擇你想要匯入到的表即可
    在這裡插入圖片描述
  • 欄位對應關係由於我們就是根據需求對應建立的,所以不用更改,當然有些時候需要自己選擇一下,之後預設下一步直到完成即可。
    在這裡插入圖片描述
  • 開啟MySQL中的employees表我們發現Excel中資料成功匯入
    在這裡插入圖片描述

MySQL匯出表到Excel檔案

  • 使用Navicat for MySQL從MySQL匯出表到Excel檔案操作和將Excel資料匯入到MySQL操作大同小異。操作步驟更少
  • 選擇匯出嚮導在這裡選擇需要匯出的表後需要給你要匯出的檔案命名並選擇儲存的地址,之後預設下一步後點選開始即開始匯出。
    在這裡插入圖片描述
  • 操作完成後即可以在你儲存的地方找到匯出後的檔案
    在這裡插入圖片描述

作業

專案七:各部門工資最高的員工(難度:中等)

建立Employee 表,包含所有員工資訊,每個員工有其對應的 Id, salary 和 department Id。

Id Name Salary DepartmentId
1 Joe 70000 1
2 Henry 80000 2
3 Sam 60000 2
4 Max 90000 1

建立Department 表,包含公司所有部門的資訊。

Id Name
1 IT
2 Sales

編寫一個 SQL 查詢,找出每個部門工資最高的員工。例如,根據上述給定的表格,Max 在 IT 部門有最高工資,Henry 在 Sales 部門有最高工資。

Department Employee Salary
IT Max 90000
Sales Henry 80000

作業解答:

SELECT d.`Name` AS Department,e.`Name` AS Employee,e.Salary AS Salary
FROM Employee e, Department d
WHERE e.DepartmentId = d.id
AND e.Salary = (
SELECT MAX(Salary) FROM Employee 
WHERE DepartmentId = d.id)

結果顯示:
在這裡插入圖片描述

專案八: 換座位(難度:中等)

小美是一所中學的資訊科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 id。
其中縱列的 id 是連續遞增的
小美想改變相鄰倆學生的座位。
你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢?
請建立如下所示seat表:
示例:

id student
1 Abbot
2 Doris
3 Emerson
4 Green
5 Jeames

假如資料輸入的是上表,則輸出結果如下:

id student
1 Doris
2 Abbot
3 Green
4 Emerson
5 Jeames

注意:
如果學生人數是奇數,則不需要改變最後一個同學的座位。
作業解答:

SELECT s.id,s.student FROM(
SELECT id-1 AS id,student FROM seat WHERE MOD(id,2)= 0 -- 偶數id-1變成奇數
UNION 
SELECT id+1 AS id,student FROM seat WHERE MOD(id,2)= 1 -- 奇數id+1變成偶數
AND id <> (SELECT count(*) FROM seat)				-- 要注意如果最後是奇數id不變
UNION
SELECT id,student FROM seat WHERE MOD(id,2) = 1
AND id = (SELECT count(*) FROM seat)
) s 
ORDER BY id;

結果:
在這裡插入圖片描述

專案九: 分數排名(難度:中等)

編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(Rank)相同。請注意,平分後的下一個名次應該是下一個連續的整數值。換句話說,名次之間不應該有“間隔”。
建立以下score表:

Id Score
1 3.50
2 3.65
3 4.00
4 3.85
5 4.00
6 3.65

例如,根據上述給定的 Scores 表,你的查詢應該返回(按分數從高到低排列):

Score Rank
4.00 1
4.00 1
3.85 2
3.65 3
3.65 3
3.50 4

作業解答:
思路:對於任一分數,從score表中找出大於或等於該分數的不重複的分數,然後降序排列

SELECT Score,
(SELECT count(DISTINCT Score) FROM Score AS s2 WHERE s2.Score >= s1.Score) AS Rank 
FROM Score AS s1
ORDER BY Score DESC;

執行結果:
在這裡插入圖片描述

相關文章