Oracle分析函数/排名函数/位移函数/同比环比
分析函数
作用:分析函数可以在数据中进行分组,然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。
统计函数:MAX(字段名)、MIN(字段名)、AVG(字段名)、SUM(字段名)、COUNT(字段名)。
--语法结构:
--函数名(参数) OVER ([PARTITION BY 字段名] [ORDER BY 字段名]) --分析函数与分组聚合(统计)函数的不同之处:
-->普通的聚合函数分组是采用 GROUP BY;而分析函数分组是采用 PARTITION BY;
-->分组聚合后的每个分组返回一个统计值;分析函数分组后的每组每行都可以返回一个统计值。
SELECT E.*,
COUNT(E.DEPTNO) OVER(PARTITION BY E.DEPTNO ORDER BY E.DEPTNO) CNT,
MAX(E.SAL) OVER(PARTITION BY E.DEPTNO ORDER BY E.DEPTNO) MAX_SAL
FROM EMP E; SELECT E.DEPTNO,COUNT(E.DEPTNO)
FROM EMP E
GROUP BY E.DEPTNO; --通过职位分组,按照薪资由高到低排序,显示每个员工信息以及对应的最高薪资是多少
SELECT E.*,
MAX(E.SAL) OVER(PARTITION BY E.JOB ORDER BY E.SAL DESC)MSAL
FROM EMP E;
排名函数
ROW_NUMBER()/RANK()/DENSE_RANK()
三者的唯一区别在于碰到相同数据时的排名策略:
ROW_NUMBER():
返回一个唯一的值,当碰到相同数据时,排名按照记录集合中的记录顺序由1依次递增;例如:1,2,3,4,5,6,7...
RANK():
返回一个唯一的值,当碰到相同数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。例如:1,2,3,3,3,6,7...
DENSE_RANK():
返回一个唯一的值,当遇到相同数据时,此时所有相同数据的排名是一样的。例如:1,2,3,3,3,4,5,6,7...
SELECT E.*,
ROW_NUMBER() OVER(ORDER BY E.SAL) RN,
RANK() OVER(ORDER BY E.SAL) RANK,
DENSE_RANK() OVER(ORDER BY E.SAL) D_RANK
FROM EMP E;
位移函数
--上移函数:LEAD(字段名,上移的行数[,空行的默认值])
SELECT E.EMPNO,
E.SAL,
LEAD(E.SAL,1) OVER(ORDER BY E.SAL) LEAD_SAL,
LEAD(E.SAL,2,8888) OVER(ORDER BY E.SAL) LEAD_SAL_1
FROM EMP E; SELECT E.EMPNO,
E.ENAME,
E.JOB,
E.SAL,
LEAD(E.SAL) OVER(PARTITION BY E.JOB ORDER BY E.SAL) LEAD1
FROM EMP E; --下移函数:LAG(字段名,下移的行数[,空行的默认值])
SELECT E.EMPNO,
E.SAL,
LAG(E.SAL,1) OVER(ORDER BY E.SAL) LAG_SAL,
LAG(E.SAL,2,8888) OVER(ORDER BY E.SAL) LAG_SAL_1
FROM EMP E;
同比与环比
同比:指的是相邻的年份,相同的月份或者季度来进行涨幅的比较
同比 = (现阶段 - 上阶段)/ 上阶段;
今年第三季度的销售额为 1000万元,去年第三季度的销售额为 500万元,计算同比
(1000 - 500) / 500 = 1;
环比:指的是相同的年份,连续(相邻)的月份或者季度来进行涨幅的比较
环比 = (现阶段 - 上阶段)/ 上阶段;
今年第三季度的销售额为 1000万元,今年第二季度的销售额为 500万元,计算环比
(1000 - 500) / 500 = 1;
Oracle分析函数/排名函数/位移函数/同比环比的更多相关文章
- Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...
- Oracle分析函数——函数列表
--------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...
- oracle分析函数技术详解(配上开窗函数over())
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- oracle的分析函数over 及开窗函数
转:http://www.2cto.com/database/201310/249722.html oracle的分析函数over 及开窗函数 一:分析函数over Oracle从8.1.6开 ...
- oracle 分析函数和开窗函数
最近遇到一个需求,将查询出的数据按照地区分组,随机取出每个区域的2条数据,这里用到了oracle的分析和开窗函数: 最终写出的sql如下: select * from (select region,r ...
- Oracle 分析函数及常用函数
什么叫分析函数(Analytic function)? Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组 ...
- 关于oracle数据库(10)函数
分析函数,用于统计排名 语法:函数名() over(order by 排序字段 asc | desc) row_number() 无论值是否相等,生成连续的行号 -- 1,2,3,4, select ...
- .Net程序员学用Oracle系列(10):系统函数(下)
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.转换函数 1.1.TO_CHAR 1.2.TO_NUMBER 1.3.TO_DATE 1.4.CAST 2.近似值函数 2. ...
- oracle中110个常用函数介绍
1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dua ...
随机推荐
- pytest文档5-参数化parametrize
pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 # content of tes ...
- IoC容器(底层原理)
IoC(概念和原理) 1,什么是IoC (1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 (2)使用IoC目的:为了降低耦合度 (3)做入门案例就是IoC实现 2,IoC底层原 ...
- 微前端框架 之 single-spa 从入门到精通
前序 目的 会使用single-spa开发项目,然后打包部署上线 刨析single-spa的源码原理 手写一个自己的single-spa框架 过程 编写示例项目 打包部署 框架源码解读 手写框架 关于 ...
- python 列表删除元素,单个元素,多个连续或不连续元素
以列表a为例 import numpy as np a = ['上海市', '云南省', '内蒙古', '四川省', '天津市', '宁夏', '安徽省', '山东省', '山西省'] 删除单个元素 ...
- Node.js下载安装与配置(windows)
一.Node.js下载 官网下载地址:下载 | Node.js 中文网 (nodejs.cn) 以Windows64位安装版为例,点击"Windows 安装包(.msi)"右侧的& ...
- String类为什么可以直接赋值
在研究String直接赋值与new String的区别之前我们需要先了解java中的字符串常量池的概念 字符串常量池 String类是我们平常项目中使用频率非常高的一种对象类型,jvm为了提升性能和减 ...
- httpclient源码分析之 PoolingHttpClientConnectionManager 获取连接 (转)
PoolingHttpClientConnectionManager是一个HttpClientConnection的连接池,可以为多线程提供并发请求服务.主要作用就是分配连接,回收连接等.同一个rou ...
- Spring与Struts2整合时action自动注入的问题
当Struts和Spring框架进行整合时,原本由action实例化对象的过程移交给spring来做(这个过程依赖一个叫struts2-spring-plugin的jar包,这个包主要的功能就是实现刚 ...
- ROS::message_filters中的一个报错(mt::TimeStamp……)
『方便检索』 ros::Time msg_time = mt::TimeStamp<typename mpl::at_c<Messages, i>::type>::value( ...
- 实现基于MYSQL验证的vsftpd虚拟用户访问
一.配置mysql服务器 1.1 安装mysql # yum -y install mariadb-server # systemctl enable --now mariadb.service &a ...