Oracle 分析函数

-- Start

说起 Oracle 分析函数,可以用很好很强大来形容。这项功能特别适用于各种统计查询,这些查询用通常的SQL很难实现,或者根本就无发实现。首先,我们从一个简单的例子开始,来一步一步揭开它神秘的面纱,请看下面的SQL:

CREATE TABLE EMPLOY
(
    NAME    VARCHAR2(10),  --姓名
    DEPT    VARCHAR2(10),  --部门
    SALARY  NUMBER         --工资
);

INSERT INTO EMPLOY VALUES ('张三','市场部',4000);
INSERT INTO EMPLOY VALUES ('赵红','技术部',2000);
INSERT INTO EMPLOY VALUES ('李四','市场部',5000);
INSERT INTO EMPLOY VALUES ('李白','技术部',5000);
INSERT INTO EMPLOY VALUES ('王五','市场部',NULL);
INSERT INTO EMPLOY VALUES ('王蓝','技术部',4000);

SELECT
    ROW_NUMBER() OVER(ORDER BY SALARY) AS 序号,
    NAME                               AS 姓名,
    DEPT                               AS 部门,
    SALARY                             AS 工资
FROM EMPLOY;
 
查询结果如下:
 
序号       姓名       部门      工资
1          赵红       技术部    2000
2          张三       市场部    4000
3          王蓝       技术部    4000
4          李四       市场部    5000
5          李白       技术部    5000
6          王五       市场部    (null)

看到上面的ROW_NUMBER() OVER()了吗?很多人非常不理解,怎么两个函数能这么写呢?甚至有人怀疑上面的SQL语句是不是真的能执行。其实,ROW_NUMBER是个函数没错,它的作用从它的名字也可以看出来,就是给查询结果集编号。但是,OVER并不是一个函数,而是一个分析语句,它的作用是定义一个作用域(或者可以说是结果集),OVER前面的函数只对OVER定义的结果集起作用。怎么样,不明白?没关系,我们后面还会详细介绍。

从上面的SQL我们可以看出,典型的 Oracle 在线分析处理的格式包括两部分:函数部分OVER分析语句部分。那么,函数部分可以有哪些函数呢?如下:

ROW_NUMBER         	给查询结果集编行号
RANK               	给查询结果集编排名
DENSE_RANK         	给查询结果集编排名
MIN                	求最小值
MAX                	求最大值
AVG                	求平均值
SUM                	求总和
COUNT              	求结果集行数
FIRST_VALUE        	求最小值
LAST_VALUE         	求最大值
FIRST              	求最小值, 配合 DENSE_RANK 使用
LAST               	求最大值, 配合 DENSE_RANK 使用
LAG                	向下偏移
LEAD               	向上偏移
LISTAGG            	连接列
NTILE              	平分组
NTH_VALUE          	返回第 n 行的值
VARIANCE           	方差
VAR_POP            	总体方差
VAR_SAMP           	样本方差
STDDEV             	标准偏差
STDDEV_POP         	总体标准偏差
STDDEV_SAMP        	样本标准偏差
CORR               	协方差
COVAR_POP          	总体协方差
COVAR_SAMP         	样本协方差
CUME_DIST          	计算积分分布
PERCENT_RANK       	和 CUME_DIST 类似
PERCENTILE_CONT    	计算值的连续分布模型
PERCENTILE_DISC    	计算值的不连续分布模型
RATIO_TO_REPORT    	计算比率
REGR_SLOPE         	线性回归
REGR_INTERCEPT     	线性回归
REGR_COUNT         	线性回归
REGR_R2            	线性回归
REGR_AVGX          	线性回归
REGR_AVGY          	线性回归
REGR_SXX           	线性回归
REGR_SYY           	线性回归
REGR_SXY           	线性回归

上面这些函数的作用,我会在后面逐步给大家介绍,大家
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值