学习甲骨文分析函数(解析函数)

  

甲骨文提供了一些功能很强大的分析函数,使用这些函数可以完成可能需要存储过程来实现的需求。

分析函数计算基于一组数据行的聚合值,它们不同于聚合函数的是,它们为每一组返回多行结果。分析函数是除ORDER BY子句之外,在查询语句中最后执行的。所有的加入和所有的,GROUP BY和有子句都在分析函数之前执行。所以分析函数只能出现在选择或ORDER BY子句中。

下图为11.2版本官方文档中给出的语法示意图:

学习甲骨文分析函数(解析函数)”>下面简单介绍一下各个部分:</p> <p> <强> analytic_function </强> </p> <p>指定分析函数的名字,后面列出了所有的分析函数</p> <p> <强>参数</强> </p> <p>分析函数可以有0到3个参数。参数可以是任何数值类型或可以隐式转换为数值类型的其他非数值类型。</p> <p> <强> analytic_clause </强> </p> <p>用在analytic_clause表明函数操作的是一个查询结果集。如果想过滤基于分析函数的查询结果,需要使用嵌套子查询。</p> <p> <强> query_partition_clause </强> </p> <p>用分区由子句来把查询结果集基于一个或多个value_expr分组。如果省略,分析函数把所有行当作一组。</p> <p> <强> order_by_clause </强> </p> <p>用order_by_claus指定在一组中数据如何排序。</p> <p> ASC(默认)| DESC </p> <p> null姓(违约DESC) | null(默认在ASC) </p> <p> <强> windowing_clause </强> </p> <p>部分分析函数允许使用windowing_clause子句。</p> <p>只有当指定了order_by_clause后才能指定这个子句。</p> <p>行指定使用物理行</p> <p>的窗口范围指定使用逻辑偏移的窗口</p> <p>详细信息请参考:http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm i81407 </p> <p>下面为所有的分析函数,带*号的函数允许使用windowing_clause: <br/> </p> <p> AVG <br/> <br/> CORR数<br/> COVAR_POP <br/> COVAR_SAMP <br/> CUME_DIST <br/> DENSE_RANK <br/>第一个<br/> FIRST_VALUE <br/>滞后去年<br/> <br/> LAST_VALUE <br/> <br/>铅LISTAGG <br/> MAX <br/> <br/>中值最小值<br/> NTH_VALUE <br/> NTILE <br/> PERCENT_RANK <br/> PERCENTILE_CONT <br/> PERCENTILE_DISC <br/> <br/>排名RATIO_TO_REPORT <br/> REGR_ <br/>(线性回归)函数ROW_NUMBER <br/> STDDEV <br/> STDDEV_POP <br/> STDDEV_SAMP <br/>和<br/> VAR_POP <br/> VAR_SAMP方差<br/> </p> <p> </p> <p> </p> <pre类= scott@TEST> select  AVG (sal),得到电磁脉冲;      AVG (SAL)才能   ----------   2073.21429

作为分析函数的例子:

烤箱单独使用

scott@TEST> select  deptno, ename, hiredate,萨尔,avg (sal),在(),avg 得到电磁脉冲;      ,,,DEPTNO  ename,, hiredate,,,,,萨尔avg   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - - -安康;- - - - - - - - - - -,- - - - - - - - - - -   史密斯20,,,1980 - 12 - 17,就是,,,,800,2073.21429   30,艾伦,,1981 - 02年- 20,就是,,,1600,2073.21429   30,WARD 1981 - 02 - 22才能,就是,,,1250,2073.21429   20,琼斯,,1981 - 04 - 02,就是,,,2975,2073.21429   30,马丁,,1981 - 09 - 28,就是,,,1250,2073.21429   30日,布雷克,,1981 - 05 - 01,就是,,,2850,2073.21429   10,克拉克,,1981 - 06 - 09年,就是,,,2450,2073.21429   20日,斯科特,,1987 - 04 - 19,就是,,,3000,2073.21429   10,KING 1981 - 11 - 17才能,就是,,,5000,2073.21429   30,特纳,,1981 - 09 - 08 -,就是,,,1500,2073.21429   20,亚当斯,,1987 - 05 - 23,就是,,,1100,2073.21429   30,詹姆斯,,1981 - 12 - 03,就是,,,,950,2073.21429   20,FORD 1981 - 12 - 03 -才能,就是,,,3000,2073.21429   10,米勒,,1982 - 01 - 23,就是,,,,1300,

2073.21429从输出可以看出函数计算出了整体的平均值,并输出到每一行

eg2:使用query_partition_clause

scott@TEST> select  deptno, ename, hiredate,萨尔,avg (sal),在(partition  by  deptno), avg 得到电磁脉冲;      ,,,DEPTNO  ename,, hiredate,,,,,萨尔avg   - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - - -安康;- - - - - - - - - - -,- - - - - - - - - - -   10,克拉克,,1981 - 06 - 09年,就是,,,2450,2916.66667   10,KING 1981 - 11 - 17才能,就是,,,5000,2916.66667   10,米勒,,1982 - 01 - 23,就是,,,1300,2916.66667   20,琼斯,,1981 - 04 - 02,就是,,,,2975,,,,,,,2175   20,FORD 1981 - 12 - 03 -才能,就是,,,,3000,,,,,,,2175   20,亚当斯,,1987 - 05 - 23,就是,,,,1100,,,,,,,2175   史密斯20,,,1980 - 12 - 17,就是,,,,,800,,,,,,,2175   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

学习甲骨文分析函数(解析函数)