ORACLE分析函数(1)

来源:互联网 发布:guy里guy气网络用语 编辑:程序博客网 时间:2024/05/17 20:27

转载自:http://blog.csdn.net/yidian815/article/details/12709223 

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

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

       

[sql] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. SQL> select prod_subcategory_id,1 from products  where prod_subcategory_id > 2053  order by prod_subcategory_id;  
  2.   
  3. PROD_SUBCATEGORY_ID          1  
  4. ------------------- ----------  
  5.               <span style="color:#ff0000"> 2054          1  
  6.                2054          1  
  7.                2054          1  
  8.                2054          1  
  9.                2054          1  
  10.                2054          1</span>  
  11.               <span style="background-color:rgb(0,153,0)"> 2055          1  
  12.                2055          1  
  13.                2055          1  
  14.                2055          1  
  15.                2055          1  
  16.                2055          1  
  17.                2055          1</span>  
  18.               <span style="color:#3333ff"> 2056          1  
  19.                2056          1  
  20.                2056          1  
  21.                2056          1  
  22.                2056          1</span>  
  23.   
  24. 已选择18行。  
  25.   
  26. SQL> select prod_subcategory_id,count(1) from products  where prod_subcategory_id > 2053 group by prod_subcategory_id order by prod_subcategory_id;  
  27.   
  28. PROD_SUBCATEGORY_ID   COUNT(1)  
  29. ------------------- ----------  
  30.               <span style="color:#ff0000"> 2054          6    //对分组1求和</span>  
  31.               <span style="background-color:rgb(0,153,0)"> 2055          7    //对分组2求和</span>  
[sql] view plaincopyprint?派生到我的代码片
  1. <span style="color:#3333ff"> 2056          5    //对分组3求和</span>  
        下面,是分析函数的执行结果

        

        分析函数的执行过程: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行的数据
0 0
原创粉丝点击