一、题目
表:
Employee
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | salary | int | | managerId | int | +-------------+---------+ id 是该表的主键(具有唯一值的列)。 该表的每一行都表示雇员的ID、姓名、工资和经理的ID。编写解决方案,找出收入比经理高的员工。
以 任意顺序 返回结果表。
二、示例
输入: Employee 表: +----+-------+--------+-----------+ | id | name | salary | managerId | +----+-------+--------+-----------+ | 1 | Joe | 70000 | 3 | | 2 | Henry | 80000 | 4 | | 3 | Sam | 60000 | Null | | 4 | Max | 90000 | Null | +----+-------+--------+-----------+ 输出: +----------+ | Employee | +----------+ | Joe | +----------+ 解释: Joe 是唯一挣得比经理多的雇员。
1、一开始看题目误以为全部人跟同一个经理比较,但其实看示例可以知道,是每个员工与自己的经理薪资进行比较,因此是一个自连接问题。
2、该题无需排序
3、输出的列名需要定义
三、答案
通过将Employee复制一份出来,分别为E1、E2,假设E1为员工表,E2为经理表,当E1的ManagerID(代表员工的经理)与E2的ID(代表经理)匹配时,判断员工的Salary是否高于经理的Salary。
SELECT E1.Name AS Employee
FROM Employee E1,Employee E2
WHERE E1.ManagerId=E2.Id AND E1.Salary>E2.Salary;
运行结果: