力扣数据库 - 181.超过经理收入的员工

SQL架构

Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, ManagerId int)
Truncate table Employee
insert into Employee (Id, Name, Salary, ManagerId) values ('1', 'Joe', '70000', '3')
insert into Employee (Id, Name, Salary, ManagerId) values ('2', 'Henry', '80000', '4')
insert into Employee (Id, Name, Salary, ManagerId) values ('3', 'Sam', '60000', 'None')
insert into Employee (Id, Name, Salary, ManagerId) values ('4', 'Max', '90000', 'None')

题目描述:

Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。

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

给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。

+----------+
| Employee |
+----------+
| Joe      |
+----------+

解法

方法1:使用JOIN

SELECT e1.Name AS Employee 
FROM Employee AS e1 
RIGHT JOIN Employee AS e2 
ON e1.ManagerId = e2.Id 
WHERE e1.Salary > e2.Salary

耗时:520ms

方法2:使用WHERE

SELECT e1.Name AS Employee 
FROM Employee AS e1,
Employee AS e2 
WHERE e1.ManagerId IS NOT NULL
AND e1.ManagerId = e2.Id 
AND e1.Salary > e2.Salary

耗时:560ms

方法3:使用子查询

SELECT Name AS Employee 
FROM Employee AS e1 
WHERE e1.ManagerId IS NOT NULL
AND e1.Salary >(
SELECT Salary 
FROM Employee AS e2 
WHERE e1.ManagerId = e2.Id)

耗时:828ms

原创文章 35 获赞 14 访问量 4788

猜你喜欢

转载自blog.csdn.net/weixin_39128265/article/details/100154499