下面语句获取平均工资最高最低的部门编号,获取名称的话关联一下部门的编码表就可以了,你自己弄下吧 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)
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。
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)
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。