博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈之高级查询over(partition by)
阅读量:5040 次
发布时间:2019-06-12

本文共 921 字,大约阅读时间需要 3 分钟。

现有需求要求查询emp表每个部门工资最高的员工名称、薪水:

第一种实现:

select ename,deptno,sal from emp where (deptno,sal) in (select deptno,max(sal) from emp group by deptno);

 

第二种实现:

select ename,e.deptno,e.sal from emp,(select deptno,max(sal) sal from emp group by deptno) e

where e.deptno = emp.deptno and e.sal = emp.sal;

 

第三种实现:

select ename,deptno,sal from (select ename,sal,deptno,rank() over(partition by deptno order by sal desc) rk

from emp) where rk=1;

 

说说今天的正题^_^

简介:over函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

写法:over(partition by deptno order by sal)   按照sal排序进行累计,按照class分区。

常用:rank()、dense_rank()可以将所有的都查询出来,rank()是跳跃排序,有两个第二名时接下来是第四名,而dense()是连续排序,有两个第二名时仍然跟着第三名;sum()over()表示根据分组进行求和,也是所有的列都查询出来;first_value()、last_value()分别求出第一个和最后一个信息。

备注:group by与over partition by的区别:group by是对检索结果的保留行进行单纯分组,一般和聚合函数一起使用(avg、sum等),parition by虽然也是分组功能,但是同时也具有其他的高级功能,比如除了统计信息外还可以显示每组的信息。

转载于:https://www.cnblogs.com/jwangpip/p/9101972.html

你可能感兴趣的文章
利用mysqldump备份mysql
查看>>
Qt中子窗口全屏显示与退出全屏
查看>>
使用brew安装软件
查看>>
[BZOJ1083] [SCOI2005] 繁忙的都市 (kruskal)
查看>>
吴裕雄 python 机器学习——数据预处理嵌入式特征选择
查看>>
Centos6.4安装JDK
查看>>
201521123069 《Java程序设计》 第4周学习总结
查看>>
线性表的顺序存储——线性表的本质和操作
查看>>
【linux】重置fedora root密码
查看>>
用swing做一个简单的正则验证工具
查看>>
百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)和WGS-84坐标互转
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
爬虫综合大作业
查看>>
Kubernetes 运维学习笔记
查看>>
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>