oracle min rownum,oracle 面试题下 (七) rownum的运用

8b7bdab073e8430a47e12885fa0c2bbc.png

1 求经理人平均薪水最低的部门名称: select dname from dept where deptno = ( select deptno from ( select deptno,avg(sal)avg_sal from ( select e1.sal, e1.deptno,e2.mgr from emp e1 join emp e2 on (e1.empno=e2.mgr) ) group by deptno ) where avg_

1 求经理人平均薪水最低的部门名称:select dname from dept where deptno =

(

select deptno from

(

select deptno,avg(sal)avg_sal from

(

select e1.sal, e1.deptno,e2.mgr from emp e1 join emp e2 on (e1.empno=e2.mgr)

) group by deptno

) where avg_sal =

(

select min(avg_sal) from

(

select deptno,avg(sal)avg_sal from

(

select e1.sal, e1.deptno,e2.mgr from emp e1 join emp e2 on (e1.empno=e2.mgr)

) group by deptno

)

)

)

2 比普通员工的最高薪水还高的经理人名称select ename from emp

where empno in (select distinct mgr from emp where mgr is not null) and sal >

(

select max(sal) from emp where empno not in

(select distinct mgr from emp where mgr is not null)

)

其中(select distinct mgr from emp where mgr is not null) 注意空值的处理.

3 求薪水最高的前五雇员* 关于隐藏属性 rownum :

rownum 从1开始,每行递增 . 如查询表中的前五人:select ename from emp where rownum < = 5;

注意oracle 中 rownum 不可直接与> , = 连用, 如:select ename from emp where rownum >10;

当需要查找r>10时必须使用子查询:select ename from (select ename ,rownum r from emp)where r >10;

以上.

求薪水最高的前五人:select ename ,sal from

( select ename ,sal from emp order by sal desc )

where rownum<=5;

4 求薪水最高的第六个人到第十个人select ename,sal from

(

select ename ,sal ,rownum r from

(

select ename ,sal from emp order by sal desc

)

)where r>=6 and r <=10

为什么不能 select ename ,sal from(select ename,sal ,rownum r from emp order by sal desc)

where r >=6 and r <=10 这样写呢?

因为 (select ename,sal ,rownum r from emp order by sal desc) 这句话先取了emp的 rownum 然后再按sal 倒排, 无法达到取 sal 6到10名的效果.

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值