前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle分析函数

Oracle分析函数

作者头像
程裕强
发布2022-05-06 20:51:32
7070
发布2022-05-06 20:51:32
举报

分析函数基本语法

代码语言:javascript
复制
	函数名(参数)  over( 分区子句 排序子句 开窗子句)

说明: (1)over( ):开窗函数 (2)分区子句:partition by 字段 (3)排序子句:order by 字段 (4)开窗子句:三种开窗方式:rows、range、Specifying;使用开窗子句时一定要有排序子句 (5)分析函数是专门解决复杂报表统计,在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。

简单示例

1、查询各员工的工资,并附带所在部门最高工资

代码语言:javascript
复制
--查询各员工的工资,并附带所在部门最高工资  
SELECT E.EMPNO,
       E.ENAME,
       E.SAL,
       E.DEPTNO,
       MAX(E.SAL) OVER(PARTITION BY E.DEPTNO) MAX_SAL
  FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述

说明: (1)聚合函数用group by分组,分组返回一个统计值。 (2)分析函数用partition by分组,每组每行都可以返回一个统计值。

2、查询各员工的工资,附带部门工资总和

代码语言:javascript
复制
--查询各员工的工资,附带部门工资总和
SELECT E.EMPNO,
       E.ENAME,
       E.SAL,
       E.DEPTNO,
       SUM(E.SAL) OVER(PARTITION BY E.DEPTNO) SUM_SAL
  FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述

3、查询各员工的工资,附带部门按姓名排序的工资加和

代码语言:javascript
复制
  --查询各员工的工资,附带部门按姓名排序的工资加和
  SELECT E.EMPNO,
       E.ENAME,
       E.DEPTNO,
       E.SAL,
       SUM(SAL) OVER(PARTITION BY E.DEPTNO ORDER BY E.ENAME) SUM_SAL
  FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述

说明: (1)此例中sum窗口中的记录而不是整个分组中的记录 (2)窗口指定到该分组中的第一行数据到当前行

4、LAG函数

代码语言:javascript
复制
SELECT E.DEPTNO,
        E.SAL A,
        LAG(E.SAL,1,E.SAL) OVER(ORDER BY E.DEPTNO) B 
   FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述

说明: (1)LAG函数,在同一次查询中取出同一字段的前N行的数据作为独立的一列 (2)2450前无记录,则取其本身的值

5、LEAD函数

代码语言:javascript
复制
 SELECT E.DEPTNO,
        E.SAL A,
        LEAD(E.SAL,1,E.SAL) OVER(ORDER BY E.DEPTNO) B 
   FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述

说明:LEAD函数,在同一次查询中取出同一字段的后N行的数据作为独立的一列

6、LAG函数和LEAD函数的NULL

代码语言:javascript
复制
SELECT 
   E.DEPTNO, 
   E.SAL A, 
   LAG(E.SAL, 1, NULL) OVER(ORDER BY E.DEPTNO) B
  FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述

说明:按照DEPTNO排序后,只有2450前无记录,以NULL表示

代码语言:javascript
复制
SELECT 
   E.DEPTNO, 
   E.SAL A, 
   LAG(E.SAL, 1, NULL) OVER(PARTITION BY E.DEPTNO ORDER BY E.DEPTNO) B
  FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述

说明:分区子句PARTITION BY E.DEPTNO之后,每一组的第一条记录的前一条的值取NULL值

7、RANK函数

代码语言:javascript
复制
SELECT 
   E.EMPNO,
   E.ENAME, 
   E.SAL,
   E.DEPTNO,
   RANK() OVER(ORDER BY E.SAL) ERANK
  FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
SELECT 
   E.EMPNO,
   E.ENAME, 
   E.SAL,
   E.DEPTNO,
   RANK() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL) ERANK
  FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述

8、ROW_NUMBER函数 与RANK相比,ROW_NUMBER函数排序无重复值

代码语言:javascript
复制
SELECT 
   E.EMPNO,
   E.ENAME, 
   E.SAL,
   E.DEPTNO,
   ROW_NUMBER() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL) ERANK
  FROM TEMP_EMP E;
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析函数基本语法
  • 简单示例
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档