LeetCode 181.超过经理收入的员工 解题

超过经理收入的员工

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

解题思路及步骤:
查询收入超过他们经理的员工的姓名—观察Employee表,如果把经理的收入与下属收入放在一行就好比较了,所以用到自联结。
1.确定了需要用到两张一样的表;
2.将两张表通过笛卡儿积变成一个表;

SELECT * FROM Employee AS a,Employee AS b 

将第一个表中的每一行与第二个表中的每一行配对,如下:
在这里插入图片描述

3.根据两个表的关系去除不符合逻辑的数据—通过WHERE子句来联结两个表

WHERE a.ManagerId = b.Id

剩下 如下两行数据:

在这里插入图片描述
4.通过条件过滤数据—收入大于经理的员工:

AND a.Salary > b.Salary;

最后只保留了Joe所在行。
5.根据题中所给的如下格式:
±---------+
| Employee |
±---------+
| Joe |
±---------+

不需要呈现所有列,则将第一条语句修改如下:

SELECT a.Name AS Employee

最终语句如下:

SELECT a.Name AS Employee
FROM Employee AS a,Employee AS b
WHERE a.ManagerId = b.Id
AND a.Salary > b.Salary;

这是通过自联结的方法来解决的,还可以通过SELECT子句来解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值