题目:
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);