(1)oracle使用keep分析函数取最值记录

--取工资sal最大的雇员姓名及其工资,以及工资sal最少的雇员姓名及其工资

selectdeptno,

empno,

ename,

sal,max(ename) keep(dense_rank FIRST order by sal) over (partition by deptno) asmin_sal_man,max(sal) keep(dense_rank FIRST order by sal) over (partition by deptno) asmin_sal,max(ename) keep(dense_rank LAST order by sal) over (partition by deptno) asmax_sal_man,max(sal) keep(dense_rank LAST order by sal) over (partition by deptno) asmax_salfromempwhere deptno=10

结果如下:

从语句中可以看到,ename和sal都是用的max(),这样做的目的是为了去除由于keep()函数得到的有重复值的数据结果集。这样用有一个弊端,加入部门20有两个相同的最大SAL的人,部门30有两个相同的最小SAL的人,如果按照这种方法取出来的数据,就不一定准确了,重复的人会被去除掉。

我们用下面的语句来修改一下:

selectdeptno,

empno,

ename,

sal,max(ename) keep(dense_rank FIRST order by sal) over (partition by deptno) asmin_sal_man,max(sal) keep(dense_rank FIRST order by sal) over (partition by deptno) asmin_sal,max(ename) keep(dense_rank LAST order by sal) over (partition by deptno) asmax_sal_man,max(sal) keep(dense_rank LAST order by sal) over (partition by deptno) asmax_sal,

wmsys.wm_concat(ename) keep(dense_rank LASTorder by sal) over (partition by deptno) as工资最高的人,

wmsys.wm_concat(ename) keep(dense_rank FIRSTorder by sal) over (partition by deptno) as工资最低的人fromempwhere deptno=20

order by 1, 2 ;

我们新增了两个列:工资最高的人,工资最低的人。执行看一下结果:

可以看到,deptno=20时,SCOTT和FORD两个人的工资SAL都是3000,如果用MAX()就只能取出其中一个人的姓名,显然是不对的。

然后,我们再来看一下deptno=30时的情况:

selectdeptno,

empno,

ename,

sal,max(ename) keep(dense_rank FIRST order by sal) over (partition by deptno) asmin_sal_man,max(sal) keep(dense_rank FIRST order by sal) over (partition by deptno) asmin_sal,max(ename) keep(dense_rank LAST order by sal) over (partition by deptno) asmax_sal_man,max(sal) keep(dense_rank LAST order by sal) over (partition by deptno) asmax_sal,

wmsys.wm_concat(ename) keep(dense_rank LASTorder by sal) over (partition by deptno) as工资最高的人,

wmsys.wm_concat(ename) keep(dense_rank FIRSTorder by sal) over (partition by deptno) as工资最低的人fromempwhere deptno=30

order by 1, 2 ;

deptno=30时的结果如下:

可以看到,deptno=30时,WARD和MARTIN两人的工资最小且均为1250,如果用MAX()的方式,就只能取出其中一个人的名称。

这就是因为keep()取出来的数据集是包含多个数据结果的,所以,在语句中使用了wmsys.wm_concat()函数,该函数的作用是以逗号分隔连接列的值。

注:wm_concat()的功能有点儿类似分析函数listagg() within group() 。

(2)使用SQL子查询和聚合函数,查询出最大值和最小值

--使用子查询查询出最大值和最小值

select * from(selectdeptno,

listagg(ename,‘,‘) within group (order by deptno) asdept_max_ename,max(sal) asdept_max_salfromempwhere (deptno,sal) in (select deptno, max(sal) as max_sal from emp group bydeptno)group bydeptno

) Ainner join(selectdeptno,

listagg(ename,‘,‘) within group (order by deptno) asdept_min_ename,min(sal) asdept_min_salfromempwhere (deptno,sal) in (select deptno, min(sal) as min_sal from emp group bydeptno)group bydeptno

) Bon A.deptno = B.deptno

结果如下:

在这个方案里面,还使用了listagg()分析函数将最值有重复姓名的人合并在一起,用wm_concat()函数替代listagg()也可以

wm_concat(ename) asdept_max_ename,

wm_concat(ename)as dept_min_ename,

------------------------------------------------------------------------

原文:http://www.cnblogs.com/uzipi/p/4205389.html

oracle取最小值怎么写,【Oracle】oracle取最大值和最小值的几个方法汇总相关推荐

  1. 最大值最小值计算机一级,excel怎么找最大值和最小值 excel怎么计算最大值减最小值...

    很多excel用户经常在表格中统计数据,很多时候我们需要找出其中的最大值和最小值,怎么找呢?我们可以一个一个的查找,如果数据多的话,就麻烦了,当然我们可以用公式去查找,优点是更快更准确,那么怎么找呢? ...

  2. java date 最小值_java – Datepicker和timepicker – 设置最大值和最小值

    我想做一个类似提醒应用程序的东西.我想允许用户选择现在不是的日期和时间(至少从现在起5分钟),我还想禁止用户选择距离太远的日期 – 例如30天.我创建了datePicker和timePicker,使它 ...

  3. c语言数组最大值最小值 平均值,C语言数组的最大值,倒序,平均值等方法分享...

    #include <stdio.h> #include<stdlib.h> int zsum(int score[],int len){ int sum=0; printf(& ...

  4. 3.5 函数的极值与最大值和最小值

    学习目标: 我要学习函数的极值.最大值和最小值,我会采取以下几个步骤: 理解基本概念:首先,我会理解函数的极值.最大值和最小值的概念.例如,我会学习函数在特定区间内的最高点和最低点,并且理解这些点的概 ...

  5. IEEE 754规格化浮点数所能表示的最大值和最小值

    刚开始自己不明白最大绝对值 2- 是怎么来的,记录下 IEEE 754标准 IEEE 754标准浮点数格式: 阶码用移码表示 移码=阶码真值+偏置值 阶码真值=移码-偏置值 偏置值的公式为:2n−1− ...

  6. 二分法求数组最大最小_JavaScript之如何求数组的最大值和最小值

    上次给大家分享了从零事项jQuery的extend,今天跟大家分享下如何求数组的最大值和最小值. 取出数组中的最大值或者最小值是开发中常见的需求,但你能想出几种方法来实现这个需求呢? 1. Math. ...

  7. 用c语言输出数组中最小值,C语言.由键盘输入10个整数存入数组,输出最大值、最小值及它们的位置信息.并将最大、最小值位置互换后,再...

    共回答了18个问题采纳率:88.9% /* 输入10个整数(空格隔开) :45 67 71 23 19 87 62 33 91 24 67 71 23 19 87 62 33 91 24 最大值是 : ...

  8. Java求素组的最大值、最小值以及排序思路

    package test; import java.util.Arrays; /** *求数组的最大值.最小值以及排序思路 */ public class Test1 { public static ...

  9. Oracle数字函数:数字四舍五入,取整以及格式化

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整):floor(),trunc()  select floor(5.534) from d ...

最新文章

  1. tcp协议不具备的功能是_TCP协议的状态深度解析,你知道的和不知道的都在这篇文章(干货)...
  2. c语言:【顺序表】静态顺序表的初始化、打印、尾插、尾删
  3. delphi 插入表格HTML代码
  4. python3 多进程锁
  5. 反浏览器指纹追踪(反浏览器指纹追踪技术)
  6. 50道编程小题目之【无重复的三位数】
  7. ZMQ模式详解——发布/订阅模式
  8. 鸿蒙适配倒计时,华为鸿蒙OS2.0手机系统定档 鸿蒙OS2.0上线倒计时
  9. AndroidStudio:Path is not a readable directory.
  10. 结构梁配筋最牛插件_结构工程师应该了解的一些基本概念知识
  11. 【射频识别技术】期末重点整理
  12. 三星android应用商店,三星应用商店(Galaxy Apps)
  13. 《Thinking in java》-学习笔记(9)
  14. 3Dmax有哪些方法设置添加VR材质
  15. 珊瑚橙怎么配色配色?橙色优学教你如何玩转2019年度流行色
  16. 阿里云网站备案时变更备案的问题解决总结 满满干货
  17. 小白如何快速创建一个属于自己的APP
  18. 第十届蓝桥杯 2019年国赛 最优旅行
  19. 工程师在创业团队的技术挑战
  20. 卡尔曼滤波系列——(四)无损卡尔曼滤波

热门文章

  1. scratch少儿编程节假日主题课:父亲节的贺卡
  2. bad apple项目试制
  3. 检测电路故障c语言,电子电路故障查找检修技巧
  4. 学计算机的买哪款电脑,大学生用哪款电脑比较实用 大学生买电脑注意事项
  5. bootstrap 问号鼠标悬浮,显示提示信息
  6. 智云物业v5.0.7
  7. 红米手机显示Linux,小米红米笔记本在Deepin下出现屏幕下半部分花屏问题的解决...
  8. 洗涤心灵之音乐--献给在深夜奋斗之人~
  9. 五大浏览器硬件加速对比
  10. 交付时效提升20%,宁波银行规模化敏捷试点这一年