ITPub博客

首页 > 数据库 > Oracle > 看到论坛发的一个面试题,觉得还是不错的,整理下来

看到论坛发的一个面试题,觉得还是不错的,整理下来

原创 Oracle 作者:Angelina7 时间:2016-10-22 00:13:36 0 删除 编辑
 用一条sql求出每个部门(emp表)的最大工资和最小工资,
以及最大工资和最小工资的员工姓名。(注:一次表扫描。同一个部门最大工资或最小工资的人可能不止一个)。

(1)如果没有后边的扫描表一次就会有很多的方法可以写出需求
select empno, ename, sal max_sal, null min_sal
  from (select empno,
               ename,
               sal,
               dense_rank() over(partition by deptno order by sal desc) rn
          from emp)
 where rn = 1
union all
select empno, ename, null, sal
  from (select empno,
               ename,
               sal,
               dense_rank() over(partition by deptno order by sal asc) rn
          from emp)
 where rn = 1;


(2)wmsys.wm_concat函数
select  deptno 部门编号,
min(sal) 最小工资,
wmsys.wm_concat(ename)  keep(dense_rank first order by sal)最小工资的员工,
max(sal) 最大工资,
wmsys.wm_concat(ename)  keep(dense_rank last order by sal)最大工资的员工
from emp 
group by deptno;



 部门编号   最小工资 最小工资的员工                                                                  最大工资 最大工资的员工
---------        ----------   -------------------------------------------------                           ---------------------- -------------------

       10       1300 MILLER                                                                                 5000 KING
       20        800 SMITH                                                                                  3000 SCOTT,FORD
       30        950 JAMES                                                                                  2850 BLAKE

执行计划
----------------------------------------------------------
Plan hash value: 15469362


---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |    14 |   462 |     4  (25)| 00:00:01 |
|   1 |  SORT GROUP BY     |      |    14 |   462 |     4  (25)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| EMP  |    14 |   462 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------


Note
-----
   - dynamic sampling used for this statement (level=2)




统计信息
----------------------------------------------------------
        429  recursive calls
         72  db block gets
        711  consistent gets
         42  physical reads
          0  redo size
       5002  bytes sent via SQL*Net to client
       4303  bytes received via SQL*Net from client
         23  SQL*Net roundtrips to/from client
         30  sorts (memory)
          0  sorts (disk)



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31402276/viewspace-2126901/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORACLE体系结构
请登录后发表评论 登录
全部评论

注册时间:2016-10-14

  • 博文量
    31
  • 访问量
    12512