[LeetCode]Department Highest Salary,解題報告,leetcodesalary

來源:互聯網
上載者:User

[LeetCode]Department Highest Salary,解題報告,leetcodesalary
題目

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
思路

看到這到題目,我首先考慮的是資料庫級聯。具體思路如下:

select e.DepartmentId, MAX(e.Salary) as Salary, d.Name as Department from Employee as e inner join Department as d on e.DepartmentId = d.Id group by e.DepartmentId;

語句執行完成後,產生的表結構如下:

DepartmentId Salary Department
1 9000 IT
2 8000 Sales

2. 用上述產生的暫存資料表和Employee表再做級聯,找出題目要求的欄位。

select t.Department as Department, e.Name as Employee, t.Salary as Salary from Employee as e inner join (1-sql產生的表) as t on e.Salary = t.Salary and and e.DepartmentId = t.DepartmentId;
AC SQL

最終的ac sql語句如下:

select t.Department as Department, e.Name as Employee, t.Salary as Salary from Employee as e inner join (select e.DepartmentId, MAX(e.Salary) as Salary, d.Name as Department from Employee as e inner join Department as d on e.DepartmentId = d.Id group by e.DepartmentId) as t on e.Salary = t.Salary and e.DepartmentId = t.DepartmentId;

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.