解决方案 »

  1.   

    下面语句获取平均工资最高最低的部门编号,获取名称的话关联一下部门的编码表就可以了,你自己弄下吧
    select 
    max(deptno)keep(dense_rank first order by sal,deptno) mindeptno,
    max(deptno)keep(dense_rank last order by sal,deptno) maxdeptno
    from
    (select deptno,avg(sal) sal
    from emp
    group by deptno)
      

  2.   

    select
    max(dname)keep(dense_rank first order by sal) mindname,
    min(dname)keep(dense_rank last order by sal) maxdname
    from
    (select deptno,avg(sal) sal
    from emp
    group by deptno) t1,dept t2 where t1.deptno=t2.deptno;
    搜了下keep的用法:
    FIRST/LAST函数按照某个字段排序后取得第一行或者最后一行,FIRST/LAST聚集函数可以按A列排序,B列聚集,避免了自连接和子查询.分组聚合函数(min,max....)位于FIRST/LAST函数之前产生多行结果集,并且按照排序返回FIRST/LAST单个值.
    要指定在每个组的顺序,FIRST/LAST函数之前加上以关键字KEEP开始即可
    语法:
    min | max(column1) keep (dense_rank first | last order by column2) over (partion by column3);
     另外first last还可以结合avg  sum等使用。
    解释:
    返回按照column3分组后,按照column2排序的结果集中第一个或最后一个最小值或最大值column1。