大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。
一、题目
1、算法题目
“编写SQL查询,来查找收入比经理高的员工。”
2、题目描述
表:Employee +-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | salary | int | | managerId | int | +-------------+---------+ Id是该表的主键。 该表的每一行都表示雇员的ID、姓名、工资和经理的ID。
编写一个SQL查询来查找收入比经理高的员工。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1: 输入: 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、思路分析
题意要我们找出员工工资超过经理的人员。
首先,需要先理解这张表:
这个表的意思是:
- Sam是Joe的经理
- Max是Henry的经理
这一块理解之后,就很容易解出来结果。
采用自连接的方式,一张表当成两张表来使用:
A.managerid=B.id
然后再查找工资更好的员工:
a.Salary?b.Salary
2、代码实现
代码参考:
select a.name as Employee from Employee as a,Employee as b where a.ManagerId = b.Id and a.Salary > b.Salary
3、时间复杂度
时间复杂度:
空间复杂度:
三、总结
1、连接两张表 2、限定条件A.managerid=B.id 3、找到工资更高的员工a.Salary?b.Salary