MYSQL刷题题解_力扣_招收收入超过经理的员工

该博客提供了解决SQL查询问题的方法,目的是找到收入高于其经理的员工。通过使用内连接(INNER JOIN)操作,将员工表与自身进行连接,然后筛选出薪水更高的员工。提供的两种解法均有效地实现了这一目标,第一种解法是通过子查询,第二种则是直接内连接并过滤条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、题目描述

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| salary      | int     |
| managerId   | int     |
+-------------+---------+

编写一个SQL查询来查找收入比经理高的员工。
managerId 是此员工的经理,所有企业角色都有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 是唯一挣得比经理多的雇员。

2、题目解析

假定一张表得出结果,然后然后分析题目条件‘

  1. 这种一张表还要求收入比某人高的,一般都是要做表段比较,所以连接跑不掉,这里没有其他要求所以采用inner join

  2. 除此之外需要连接筛选条件,因为mangerid是当前员工的经理,经理也会有经理,那么连接条件就出来了,当mangerid=id时,此人一定是当前id员工的上级,然后比较salary筛选出id和name就行了

#解法1 分成两个表,一个表用来查询数据,另外一个用来当选择条件筛选
select  e1 as employee 
from employee as e1,employee as e2 
where e1.mangerid=e2.id and e1.salery>e2.salary

#解法2 内连接产生一个包含经理所有数据的表段,然后在这个表段里查询数据
select  e1.name as employee 
from employee as e1 inner join employee as e2 on e1.managerid = e2.id 
where e1.salary >e2.salary;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值