Oracle分析函数之开窗函数over()详解
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计值 ,并且每一组的每一行都可以返回一个统计值。分析函数和聚合函
千家信息网最后更新 2026年11月02日Oracle分析函数之开窗函数over()详解![复制代码]()
![复制代码]()
![复制代码]()
![复制代码]()
![复制代码]()
![复制代码]()
![复制代码]()
![复制代码]()
![复制代码]()
![复制代码]()
分析函数是什么?
分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计值 ,并且每一组的每一行都可以返回一个统计值。
分析函数和聚合函数的不同之处是什么?
普通的聚合函数用group by分组, 每个分组 返回一个统计值,而分析函数采用partition by分组,并且 每组每行 都可以返回一个统计值。
分析函数的形式
分析函数带有一个开窗函数over(),包含三个分析子句:分组(partition by), 排序(order by), 窗口(rows) ,他们的使用形式如下:over(partition by xxx order by yyy rows between zzz)。
注:窗口子句在这里我只说rows方式的窗口,range方式和滑动窗口也不提
分析函数例子(在scott用户下模拟)
示例目的:显示各部门员工的工资,并附带显示该部分的最高工资。
--显示各部门员工的工资,并附带显示该部分的最高工资。SELECT E.DEPTNO, E.EMPNO, E.ENAME, E.SAL, LAST_VALUE(E.SAL) OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL ROWS --unbounded preceding and unbouned following针对当前所有记录的前一条、后一条记录,也就是表中的所有记录 --unbounded:不受控制的,无限的 --preceding:在...之前 --following:在...之后 BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) MAX_SAL FROM EMP E;
运行结果:
示例目的:按照deptno分组,然后计算每组值的总和
SELECT EMPNO, ENAME, DEPTNO, SAL, SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME) max_sal FROM SCOTT.EMP;
运行结果:
示例目的:对各部门进行分组,并附带显示第一行至当前行的汇总
SELECT EMPNO, ENAME, DEPTNO, SAL, --注意ROWS BETWEEN unbounded preceding AND current row 是指第一行至当前行的汇总 SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) max_sal FROM SCOTT.EMP;
运行结果:
示例目标:当前行至最后一行的汇总
SELECT EMPNO, ENAME, DEPTNO, SAL, --注意ROWS BETWEEN current row AND unbounded following 指当前行到最后一行的汇总 SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) max_sal FROM SCOTT.EMP;
运行结果:
示例目标:当前行的上一行(rownum-1)到当前行的汇总
SELECT EMPNO, ENAME, DEPTNO, SAL, --注意ROWS BETWEEN 1 preceding AND current row 是指当前行的上一行(rownum-1)到当前行的汇总 SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) max_sal FROM SCOTT.EMP;
运行结果:
示例目标: 当前行的上一行(rownum-1)到当前行的下辆行(rownum+2)的汇总
SELECT EMPNO, ENAME, DEPTNO, SAL, --注意ROWS BETWEEN 1 preceding AND 1 following 是指当前行的上一行(rownum-1)到当前行的下辆行(rownum+2)的汇总 SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN 1 PRECEDING AND 2 FOLLOWING) max_sal FROM SCOTT.EMP;
运行结果:
函数
一行
分析
分组
示例
结果
运行
统计
工资
目标
目的
最高
员工
子句
形式
方式
部分
不同
复杂
强大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
百单网互联网科技有限公司
互联网科技公司排名
互联网科技产业
互联网下的科技发展
互联网最新的科技有限公司
北京禾田雨橡互联网科技
一五八零互联网科技
互联网养老 桔豆科技
互联网巨头投资的硬核科技
成都玖崟互联网科技有限公司乐商圈怎么样
团飞科技与伯堂互联网服务平台
互联网企业和科技型企业
互联网科技有哪些公司
互联网科技商业
张召忠谈中国互联网科技
广州有谷有贝互联网科技有限公司
悟空问答互联网科技
恒生科技指数 中概互联网
保山浩联互联网科技有限公司
上海旺乐尼互联网科技有限公司
新华互联网科技
互联网电商科技
上海互联网科技有限公司
互联网科技公司发展
安徽鑫晟辉互联网科技
字节跳动和互联网科技
湖南一路畅行互联网科技
阿大互联网科技有限公司
元气玛特互联网科技公司是外包吗
广东猫王互联网科技有限公司电话