LeetCode:181. Employees Earning More Than Their Managers

题目:
The Employee table holds all employees including their managers. Every employee has an Id, and there is also a column for the manager Id.

+—-+——-+——–+———–+
| Id | Name | Salary | ManagerId |
+—-+——-+——–+———–+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | NULL |
| 4 | Max | 90000 | NULL |
+—-+——-+——–+———–+
Given the Employee table, write a SQL query that finds out employees who earn more than their managers. For the above table, Joe is the only employee who earns more than his manager.

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

Answer:
思路:一个表当2个表用。

SELECT
    E1.Name AS 'Employee'
FROM
    Employee AS E1,
    Employee AS E2 
WHERE
    E1.ManagerId = E2.Id 
    AND E1.Salary > E2.Salary

分析:

SELECT
    *
FROM
    Employee AS E1,
    Employee AS E2 

的结果如下(2个表相乘,4 * 4 = 16个结果,4 + 4 =8个字段):
这里写图片描述
接着,

SELECT
    *
FROM
    Employee AS E1,
    Employee AS E2 
WHERE
    E1.ManagerId = E2.Id 

结果如下(剩下2个结果了):
这里写图片描述
接着,

SELECT
    *
FROM
    Employee AS E1,
    Employee AS E2 
WHERE
    E1.ManagerId = E2.Id 
    AND E1.Salary > E2.Salary

结果如下(剩下1个结果了):
这里写图片描述
最后,将*改为E1.Name AS 'Employee',取结果中的Name字段。
这里写图片描述

Finally,附上employee表的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', NULL);
insert into Employee (Id, Name, Salary, ManagerId) values ('4', 'Max', '90000', NULL);
发布了43 篇原创文章 · 获赞 27 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/SCUTJcfeng/article/details/80012750