分析函数式ORACLE提供的用来进行数据统计的强有力工具,与我们常用的聚合函数具有一些相似性,但又完全不同。聚合函数,首先会将数据进行分组,然后对每一组数据进行运算,如求和sum,求平均AVG等,对于聚合函数,每一个分组返回一条数据结果行。分析函数,同样也会对数据进行求和或者求平均等运算,但是,分析函数计算的基础并不是分组,而是窗口,而且分析函数根据每条记录会返回一个处理结果。

首先,看一下下面的例子:

SQL> select prod_subcategory_id,1 from products  where prod_subcategory_id > 2053  order by prod_subcategory_id;

PROD_SUBCATEGORY_ID          1
------------------- ----------
2054 1
2054 1
2054 1
2054 1
2054 1
2054 1
2055 1
2055 1
2055 1
2055 1
2055 1
2055 1
2055 1
2056 1
2056 1
2056 1
2056 1
2056 1 已选择18行。 SQL> select prod_subcategory_id,count(1) from products where prod_subcategory_id > 2053 group by prod_subcategory_id order by prod_subcategory_id; PROD_SUBCATEGORY_ID COUNT(1)
------------------- ----------
2054 6 //对分组1求和
2055 7 //对分组2求和
               2056          5    //对分组3求和

下面,是分析函数的执行结果

分析函数的执行过程:1:除order by子句之外的sql语句,如select,where等===》2:分析函数====》3:order by 子句。

执行分析函数时,首先会对步骤1的执行结果按照rownum进行排序(有分析函数中的order by子句决定),对排序后的结果,依次处理结果集中的每一条记录。当处理第一条记录时,分析函数count()的统计范围为第一条记录,当处理第二条记录时,处理范围为第一条记录和第二条记录,依次类推,处理第n条记录时,count统计范围为第一条记录和第n条记录之间的所有记录。

正如在图片中展示的一样,我们将分析函数的处理范围称为窗口,(窗口的处理范围是可以由我们来指定的)。

在进一步了解分析函数之前,首先来看一下分析函数的语法格式:


常见的分析函数:

SUM  *       : 该函数计算组中表达式的累积和

MIN  *       : 在一个组中的数据窗口中查找表达式的最小值

MAX  *       : 在一个组中的数据窗口中查找表达式的最大值

AVG *          :用于计算一个组和数据窗口内表达式的平均值。

COUNT  *     : 对一组内发生的事情进行累积计数

RANK        : 根据 ORDER BY 子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置

DENSE_RANK  : 根据 ORDER BY 子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置

FIRST        : 从 DENSE_RANK 返回的集合中取出排在最前面的一个值的行

LAST         : 从 DENSE_RANK 返回的集合中取出排在最后面的一个值的行

FIRST_VALUE * : 返回组中数据窗口的第一个值

LAST_VALUE * : 返回组中数据窗口的最后一个值。

LAG         : 可以访问结果集中的其它行而不用进行自连接

LEAD        : LEAD 与 LAG 相反, LEAD 可以访问组中当前行之后的行

ROW_NUMBER : 返回有序组中一行的偏移量,从而可用于按特定标准排序的行号

STDDEV      *: 计算当前行关于组的标准偏离

STDDEV_POP *: 该函数计算总体标准偏离,并返回总体变量的平方根

STDDEV_SAMP *: 该函数计算累积样本标准偏离,并返回总体变量的平方根

VAR_POP    * : 该函数返回非空集合的总体变量(忽略 null )

VAR_SAMP  *  : 该函数返回非空集合的样本变量(忽略 null )

VARIANCE  *  : 如果表达式中行数为 1 ,则返回 0 ,如果表达式中行数大于 1 ,则返回 VAR_SAMP

COVAR_POP  * :返回一对表达式的总体协方差

COVAR_SAMP *:返回一对表达式的样本协方差

CORR *       :返回一对表达式的相关系数

CUME_DIST   : 计算一行在组中的相对位置

NTILE        : 将一个组分为 " 表达式 " 的散列表示

PERCENT_RANK : 和 CUME_DIST (累积分配)函数类似

PERCENTILE_DISC : 返回一个与输入的分布百分比值相对应的数据值

PERCENTILE_CONT : 返回一个与输入的分布百分比值相对应的数据值

RATIO_TO_REPORT : 该函数计算 expression/(sum(expression)) 的值,它给出相对于总数的百分比

REGR_ (Linear Regression) Functions *: 这些线性回归函数适合最小二乘法回归线,有 9 个不同的回归函数可使用

LISTAGG :对值进行连接

NTH_VALUE *:返回窗口中的n行的数据

[置顶] ORACLE分析函数(1)的更多相关文章

  1. [置顶] Oracle job procedure 存储过程定时任务

    oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; selec ...

  2. [置顶] Oracle 11g R2 RAC:使用 srvctl 工具管理 service 资源

    1.使用 srvctl 工具创建 service 资源 srvctl add service -d db_unique_name -s service_name {-r "preferred ...

  3. [置顶] Oracle 11g R2 ASM:了解 Oracle ASM 基本概念

    About Oracle ASM Instances About Oracle ASM Disk Groups About Mirroring and Failure Groups About Ora ...

  4. [置顶] Oracle GoldenGate 系列:使用 Oracle ASM API DBLOGREADER 时遇 ora-01031 错误

    今天在自己新搭建的 Oracle ACFS 文件系统上测试 GoldenGate ,启动 extract 进程报如下错误: 2013-08-27 14:58:39  ERROR   OGG-00446 ...

  5. [置顶] Oracle 11g ASM:如何在 ASMCMD 命令行工具中创建 Oracle ACFS 文件系统

    实验环境:Oracle 11g R2 RAC (11.2.0.3.5)                Oracle Enterprise Linux 5.6 x86 1.创建 ASM 磁盘组 在两节点 ...

  6. [置顶] oracle存储过程中单引号及字符串拼接处理

    在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为转义符,如果第二个单引号后 ...

  7. [置顶] oracle 快速查询数据库各种信息、及转换对应java代码

    1 查询表中数据量 select 'select '||''''||t.TABLE_NAME||''''||' as table_name, count(*) from '|| t.TABLE_NAM ...

  8. [置顶] Oracle 11g Data Guard Role Transitions: Failover

    Role TransitionsInvolving Physical Standby Databases A database operates in one of the following mut ...

  9. [置顶] Oracle学习路线与方法

    还没有整理好.... 1.学习路线 Oracle官方文档:2 Day DBA-->2 Day+Performance Tuning Guide--->Administrator's Gui ...

随机推荐

  1. poj 1259 Agri-Net(最小生成树)

    题目:http://poj.org/problem?id=1258 题意:模板题 和2485差不多 就是求相连后的最小值. #include <iostream> #include< ...

  2. hibernate实体的几种状态:

    hibernate实体的几种状态: 实体的生命周期中,实体主要经过瞬时(Transient),托管(Attatched或Managed),游离(Detached)和销毁(Removed)四个状态. 瞬 ...

  3. Entityframework常用命令

    Enable-Migrations 启用Migration数据迁移 Add-Migration migrationname 添加一个migration Update-Database –TargetM ...

  4. 一致性hash算法 - consistent hashing

    consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛: 1 ...

  5. 【转】Parallels Desktop 11.2.0 破解版 最佳Mac虚拟机软件

    原文网址:http://www.macappstore.net/parallels-desktop-11-pojie-ban/ Parallels Desktop 11.2.0 破解版 最佳Mac虚拟 ...

  6. html语意化标签

    一.布局的理解误区 网络上流行管新型的布局方式叫“DIV+CSS”,其实是一个错误的理解,导致了很多人过度依赖 与滥用DIV标签, HTML提供了我们一共七八十个标签,其中常用的有三十个左右,DIV不 ...

  7. class属性添加多个类

    <html> <head> <style type="text/css"> h1.intro { color:blue; text-align: ...

  8. SQL Server 2008 R2主数据服务安装

    SQL Server 2008 R2的主数据服务(Master Data Services,简称MDS)已经放出,目前是CTP版本,微软提供了下载地址: http://www.microsoft.co ...

  9. 算法 后减前最大值,zt

    一个人知道未来n天的每天股票的价格,请你给出一个算法,使得这个人从哪天买入,哪天卖出能获得最大的收益. 问题实际上就是求一个数组后面元素减前面元素的最大值 #include <stdio.h&g ...

  10. HDU 4276-The Ghost Blows Light(树状背包)

    题意: n个房间,每个有一定的钱,一个房间到另一个房间花费一定的时间,给你房间连接树,求在t时间内到达房间m能得到的最大钱数(从房间1(根)出发) 分析: 该题关键是最后要到达m,没有这个条件,就是基 ...