[LeetCode]Department Highest Salary,解题报告

Posted 低调小一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]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.

IdNameSalaryDepartmentId
1Joe700001
2Henry800002
3Sam600002
4Max900001

The Department table holds all departments of the company.

IdName
1IT
2Sales

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.

DepartmentEmployeeSalary
ITMax90000
SalesHenry80000

思路

看到这到题目,我首先考虑的是数据库级联。具体思路如下:

  1. 查找每一部门的最高薪水。
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;

语句执行完成后,生成的表结构如下:

DepartmentIdSalaryDepartment
19000IT
28000Sales

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;

以上是关于[LeetCode]Department Highest Salary,解题报告的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode]Department Highest Salary,解题报告

[LeetCode] Department Highest Salary -- 数据库知识(mysql)

LeetCode 69. Sqrt(x)

leetcode367

Leetcode BiWeekly Contest 31

Leetcode-1086 high five(前五科的均分)