取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的*姓名

首先获得所有领导的名单

select e.empno,e.ename,e.sal from emp e 
join 
(select DISTINCT e.mgr as mgr from emp e where e.mgr is  not null) e1
on e.empno = e1.mgr
order by e.sal;

取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的*姓名

然后获得所有普通员工(非领导职务)的名单

select 
	b.empno,b.ename,b.sal 
from
	emp a
right join
	emp b
on
	a.mgr = b.empno
 where a.ename is null;

取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的*姓名
第三步,找出普通员工的最高薪水

select max(sal) as maxsal from (select 
	b.empno,b.ename,b.sal 
from
	emp a
right join
	emp b
on
	a.mgr = b.empno
 where a.ename is null) c;

第四步,找出领导中薪水比普通员工最高薪水高的员工

select e.empno,e.ename,e.sal from emp e 
join 
(select DISTINCT e.mgr as mgr from emp e where e.mgr is  not null) e1
on e.empno = e1.mgr
join
(select max(sal) as maxsal from (select 
	b.empno,b.ename,b.sal 
from
	emp a
right join
	emp b
on
	a.mgr = b.empno
 where a.ename is null) c) d
 on e.sal>d.maxsal;

结果是所有领导工资都比普通员工高。
取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的*姓名
感觉代码好像太繁琐了,希望以后通过学习能简化这个查询语句。

上一篇:接口测试


下一篇:MGR 3节点的单主模式,如果有两个节点主机宕机,临时对外提供服务的方法