[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.

+----+-------+--------+--------------+
| 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  |
+------------+----------+--------+

这道题让给了我们两张表,Employee表和Department表,让我们找系里面薪水最高的人的,实际上这题是Second Highest SalaryCombine Two Tables的结合题,我们既需要联合两表,又要找到最高薪水,那么我们首先让两个表内交起来,然后将结果表需要的列都标明,然后就是要找最高的薪水,我们用Max关键字来实现,参见代码如下:

解法一:

SELECT d.Name AS Department, e1.Name AS Employee, e1.Salary FROM Employee e1
JOIN Department d ON e1.DepartmentId = d.Id WHERE Salary IN 
(SELECT MAX(Salary) FROM Employee e2 WHERE e1.DepartmentId = e2.DepartmentId);

我们也可以不用Join关键字,直接用Where将两表连起来,然后找最高薪水的方法和上面相同:

解法二:

SELECT d.Name AS Department, e.Name AS Employee, e.Salary FROM Employee e, Department d
WHERE e.DepartmentId = d.Id AND e.Salary = (SELECT MAX(Salary) FROM Employee e2 WHERE e2.DepartmentId = d.Id);

下面这种方法没用用到Max关键字,而是用了>=符号,实现的效果跟Max关键字相同,参见代码如下:

解法三:

SELECT d.Name AS Department, e.Name AS Employee, e.Salary FROM Employee e, Department d
WHERE e.DepartmentId = d.Id AND e.Salary >= ALL (SELECT Salary FROM Employee e2 WHERE e2.DepartmentId = d.Id);

本文转自博客园Grandyang的博客,原文链接:系里最高薪水[LeetCode] Department Highest Salary ,如需转载请自行联系原博主。

相关文章
|
9月前
|
程序员 Python
那些年我们de过的bug(1)
在我的编程经历中,遭遇了无数的 bug。打算挑一些我还能想起来的且不那么低级的,跟大家分享一下。今天先抛个砖。也欢迎大家分享你遇到的奇葩 bug。
|
8月前
|
数据库 索引
SELECT
SELECT
45 0
|
9月前
|
编译器 C++
devc++ 问题小总结
devc++ 问题小总结
192 0
Employee 类
Employee 类
73 0
|
SQL 数据挖掘 Python
SQL3 查找当前薪水详情以及部门编号dept_no
SQL3 查找当前薪水详情以及部门编号dept_no
SQL3 查找当前薪水详情以及部门编号dept_no
|
关系型数据库 MySQL 测试技术
软件测试mysql面试题:对于表Employee_Details中的Employee_Name‘yuhan‘,如何将‘Salary‘字段的值更改为7500?
软件测试mysql面试题:对于表Employee_Details中的Employee_Name‘yuhan‘,如何将‘Salary‘字段的值更改为7500?
63 0
|
SQL Java 中间件
SELECT * FROM GIRLS WHERE AGE BETWEEN 20 AND 24 ...
阿粉最近看到一张图,如上所示,原本只是一个搞笑的图,但是在阿粉看来这分明是个渣男啊!一句普通的 SQL 语句SELECT * FROM GIRLS WHERE AGE BETWEEN 20 AND 24 AND BOYFRIEND IS NULL,也有很多内涵! 什么?没看出来?来,阿粉带你品品。
SELECT * FROM GIRLS WHERE AGE BETWEEN 20 AND 24 ...