【leetcode Database】184. Department Highest Salary

題目:

The Employee table holds all employees. Every employee has an Id, a salary, and there is also a column for the department Id.

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

The Department table holds all departments of the company.

+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+

Write a SQL query to find employees who have the highest salary in each of the departments. For the above tables, Max has the highest salary in the IT department and Henry has the highest salary in the Sales department.

+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| Sales      | Henry    | 80000  |
+------------+----------+--------+
解析:

看到這道題目,我首先想到的是用group by對部門進行分組,然後再select每個部門中工資最高的人。最初代碼如下

# Write your MySQL query statement below
SELECT d.Name AS Department, e.Name AS Employee,MAX(e.Salary) AS Salary FROM Department AS d 
INNER JOIN Employee AS e ON d.Id = e.DepartmentId GROUP BY e.DepartmentId;

但是,提交後發現是錯誤的。這是因爲少考慮了一種情況,每個部門的最高工資可能不止一個人!正確的做法應該是把檢索出來的結果作爲一個數據表,然後再把員工表中與最高工資相等且是該部門的員工檢索出來。修正後的代碼如下:

# Write your MySQL query statement below
SELECT t.Department, p.Name AS Employee, t.Salary FROM Employee AS p,
(SELECT d.Id,d.Name AS Department,MAX(e.Salary) AS Salary FROM Department AS d 
INNER JOIN Employee AS e ON d.Id = e.DepartmentId GROUP BY e.DepartmentId) AS t 
WHERE p.Salary = t.Salary AND p.DepartmentId = t.Id;

發佈了105 篇原創文章 · 獲贊 77 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章