emp表单的查询

1.取得每个部门最高薪水的人员名称

      第一步:取得每个部门的最高薪水

      select max(sal) from emp group by deptno;

第二步:根据第一步的结果和员工表进行关联,获取人员名称

select a.empno,a.ename,a.sal,a.deptno from emp a join (select deptno, max(sal) max_sal from emp group by deptno ) b on a.deptno= b.deptno and a.sal = b.max_sal;

2.哪些人的薪水在部门的平均薪水之上

      第一步:获取每个部门的平均薪水

      Select deptno, avg(sal) avgSal from emp group bydeptno

      第二步:根据第一步的结果和员工表进行关联。获取人员名称

3.取得部门中(所有人的)平均的薪水等级

第一步:获得所有人的薪水等级

select e.empno,e.ename,e.deptno,g.grade from emp e join salgrade g on e.sal  between g.losal and g.hisal 

第二步:将第一步的结果用部门进行分组。然后获取等级的平均值

select s.deptno ,avg(grade) from (select e.empno,e.ename,e.deptno,g.grade from emp e join salgrade g on e.sal  between g.losal and g.hisal ) s group by s.deptno

4.不准用组函数(Max),取得最高薪水

第一种方法:

第一步:将员工薪水降序排列

select empno,ename,sal from emp order by sal desc

第二步:取得第一条数据

select a.empno,a.ename,a.sal from (select empno,ename,sal from emp order by sal desc) a where rownum < = 1;

第二种方法:

第一步:将emp表当做2张表来处理。使用的笛卡尔乘积的方法进行比较。得到最大值以外的值。 select distinct a.sal from emp a join emp b on a.sal < b.sal  第二步:获得最大值 select a.sal,a.empno,a.ename from emp a where sal not in (select distinct a.sal from emp a join emp b on a.sal < b.sal ); 第三种方法: 第一步:将emp表当做2张表来处理。使用的笛卡尔乘积的方法进行比较。从大到小排序 select distinct a.sal from  emp a join emp b on a.sal > b.sal  第二步:取得第一条数据 select  sal from (select distinct a.sal from  emp a join emp b on a.sal > b.sal ) where rownum <= 1

5,取得平均薪水最高的部门的部门编号。 第一种方法: 第一步:取得各部门的平均薪水。按desc排序。取得最大值 select e.deptno, avg(e.sal) avg_sal from emp e group by e.deptno  order by avg_sal desc ; 第二步:取得第一条数据 select a.deptno, a.avg_sal from (select e.deptno, avg(e.sal) avg_sal from emp e group by e.deptno  order by avg_sal desc ) a where rownum < =1; 第二种方法: 第一步:取得各部门的平均薪水 select avg(sal) avg_sal,e.deptno from emp e group by deptno; 第二步:使用聚合函数获得平均薪水最大值 select max(avg_sal) from (select  avg(sal) avg_sal,e.deptno from emp e group by deptno) 第三步:将第一步和第二步获取的结果进行关联 select m.deptno from  (select  avg(sal) avg_sal,e.deptno from emp e group by deptno) m  right join  (select max(avg_sal) max_sal from (select  avg(sal) avg_sal,e.deptno from emp e group by deptno)) n on m.avg_sal = n.max_sal 第三种方法: 第一步:获得各部门的最大值 select max(avg(sal)) from emp m group by deptno; 第二步:使用having过滤。获得最大值 select a.deptno,avg(sal) avg_sal from emp a group by deptno   having avg(sal)  = (select max(avg(sal)) from emp m group by deptno);

6.取得平均薪水最高的部门的部门名称

第一种方法:

第一步:取得各部门的平均薪水

select e.deptno ,avg(sal) avg_sal from emp e group by deptno order by avg_sal desc;

第二步:取得各部门的平均薪水最大值

select m.deptno, avg_sal from (select e.deptno ,avg(sal) avg_sal from emp e group by deptno order by avg_sal desc) m where rownum <=1 ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值