知识大全 Oracle分析函数的使用一

Posted 函数

篇首语:尺有所短;寸有所长。物有所不足;智有所不明。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle分析函数的使用一相关的知识,希望对你有一定的参考价值。

Oracle分析函数的使用一  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  分析函数是oracle 引入的一个全新的概念 为我们分析数据提供了一种简单高效的处理方式 在分析函数出现以前 我们必须使用自联查询 子查询或者内联视图 甚至复杂的存储过程实现的语句 现在只要一条简单的sql语句就可以实现了 而且在执行效率方面也有相当大的提高 下面我将针对分析函数做一些具体的说明

    

  今天我主要给大家介绍一下以下几个函数的使用方法

    

     自动汇总函数rollup cube

    

     rank 函数 rank dense_rank row_number

    

           lag lead函数

    

           sum avg 的移动增加 移动平均数

    

           ratio_to_report报表处理函数

    

           first last取基数的分析函数

    

  基础数据

    

  Code:        [Copy to clipboard]

   : : SQL> select * from t;

    

  BILL_MONTH      AREA_CODE  NET_TYPE       LOCAL_FARE

  

                    G             

                    J             

                     G             

                    J             

                    G             

                    J             

                    G             

                    J             

                    G            

                    J            

                    G             

                    J             

                    G             

                    J             

                    G             

                    J             

                    G             

                    J             

                    G            

                    J            

                    G             

                    J             

                    G             

                    J             

                    G             

                    J              

                    G             

                    J             

                    G            

                    J            

                    G             

                    J             

                    G             

                    J             

                    G             

                    J             

                    G             

    

  BILL_MONTH      AREA_CODE  NET_TYPE       LOCAL_FARE

  

                    J             

                    G            

                    J            

    

   rows selected

    

  Elapsed: : :

    

   使用rollup函数的介绍

    

  Quote:

  

  下面是直接使用普通sql语句求出各地区的汇总数据的例子

   : : SQL> set autot on

   : : SQL> select area_code sum(local_fare) local_fare

   : :      from t

   : :      group by area_code

   : :      union all

   : :      select 合计 area_code sum(local_fare) local_fare

   : :      from t

   : :      /

    

  AREA_CODE      LOCAL_FARE

  

            

            

            

            

           

  合计        

    

   rows selected

    

  Elapsed: : :

    

  Execution Plan

  

         SELECT STATEMENT Optimizer=ALL_ROWS (Cost= Card= Bytes=

   )

    

          UNION ALL

            SORT (GROUP BY) (Cost= Card= Bytes= )

              TABLE ACCESS (FULL) OF T (Cost= Card= Bytes=

   )

    

            SORT (AGGREGATE)

              TABLE ACCESS (FULL) OF T (Cost= Card= Bytes=

   )

    

  Statistics

  

     recursive calls

     db block gets

     consistent gets

     physical reads

     redo size

     bytes sent via SQL*Net to client

     bytes received via SQL*Net from client

     SQL*Net roundtrips to/from client

     sorts (memory)

     sorts (disk)

     rows processed

    

  下面是使用分析函数rollup得出的汇总数据的例子

    

   : : SQL> select nvl(area_code 合计 ) area_code sum(local_fare) local_fare

   : :      from t

   : :      group by rollup(nvl(area_code 合计 ))

   : :      /

    

  AREA_CODE      LOCAL_FARE

  

            

            

            

            

           

  

    

   rows selected

    

  Elapsed: : :

    

  Execution Plan

  

         SELECT STATEMENT Optimizer=ALL_ROWS (Cost= Card= Bytes=

   )

    

          SORT (GROUP BY ROLLUP) (Cost= Card= Bytes= )

            TABLE ACCESS (FULL) OF T (Cost= Card= Bytes=

  )

    

  Statistics

  

     recursive calls

     db block gets

     consistent gets

     physical reads

     redo size

     bytes sent via SQL*Net to client

     bytes received via SQL*Net from client

     SQL*Net roundtrips to/from client

     sorts (memory)

     sorts (disk)

     rows processed

    

  从上面的例子我们不难看出使用rollup函数 系统的sql语句更加简单 耗用的资源更少 从 个consistent gets降到 个consistent gets 如果基表很大的话 结果就可想而知了

    

   使用cube函数的介绍

    

  Quote:

    

  为了介绍cube函数我们再来看看另外一个使用rollup的例子

    

   : : SQL> select area_code bill_month sum(local_fare) local_fare

   : :      from t

   : :      group by rollup(area_code bill_month)

   : :      /

    

  AREA_CODE  BILL_MONTH          LOCAL_FARE

  

                      

                      

                      

                      

                            

                      

                      

                      

                      

                            

                      

                      

                       

                      

                            

                      

                      

                      

                      

                            

                      

                      

                      

                      

                            

  

    

   rows selected

    

  Elapsed: : :

    

  系统只是根据rollup的第一个参数area_code对结果集的数据做了汇总处理 而没有对bill_month做汇总分析处理 cube函数就是为了这个而设计的

    

  下面 让我们看看使用cube函数的结果

    

   : : SQL> select area_code bill_month sum(local_fare) local_fare

   : :      from t

   : :      group by cube(area_code bill_month)

   : :      order by area_code bill_month nulls last

   : :      /

    

  AREA_CODE  BILL_MONTH          LOCAL_FARE

  

                         

                         

                         

                         

                               

                          

                         

                         

                         

                               

                         

                         

                         

                         

                               

                         

                         

                         

                         

                               

                         

                         

                         

                          

                              

                  

                  

                  

                  

  

    

   rows selected

    

  Elapsed: : :

    

  可以看到 在cube函数的输出结果比使用rollup多出了几行统计数据 这就是cube函数根据bill_month做的汇总统计结果]

   rollup 和 cube函数的再深入

    

  Quote:

    

  从上面的结果中我们很容易发现 每个统计数据所对应的行都会出现null 我们如何来区分到底是根据那个字段做的汇总呢 这时候 oracle的grouping函数就粉墨登场了

    

  如果当前的汇总记录是利用该字段得出的 grouping函数就会返回 否则返回

    

     select decode(grouping(area_code) all area to_char(area_code)) area_code

            decode(grouping(bill_month) all month bill_month) bill_month

            sum(local_fare) local_fare

     from t

     group by cube(area_code bill_month)

   * order by area_code bill_month nulls last

   : : SQL> /

    

  AREA_CODE  BILL_MONTH          LOCAL_FARE

  

                         

                         

                         

                         

          all month            

                          

                         

                         

                         

          all month            

                         

                         

                         

                         

          all month            

                         

                         

                         

                         

          all month            

                         

                         

                         

                         

          all month           

  all area                  

  all area                  

  all area                  

  all area                  

  all area   all month           

    

   rows selected

    

  Elapsed: : :

   : : SQL>

    

cha138/Article/program/Oracle/201311/18065

相关参考

知识大全 Oracle 9i 分析函数参考手册

Oracle9i分析函数参考手册  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle从开

知识大全 Oracle使用hash分区优化分析函数查询

Oracle使用hash分区优化分析函数查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在O

知识大全 新手上路:Oracle分析函数学习笔记一

新手上路:Oracle分析函数学习笔记一  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  环境wi

知识大全 oracle的分析函数over(Partition by...)

oracle的分析函数over(Partitionby...)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 利用Oracle分析函数实现多行数据合并为一行

利用Oracle分析函数实现多行数据合并为一行  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  d

知识大全 Oracle 数据对象分析

Oracle数据对象分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  过程和函数    过程和

知识大全 Oracle通用函数,分组函数,子查询

Oracle通用函数,分组函数,子查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  注意)Or

知识大全 Oracle中sign函数和decode函数的使用

Oracle中sign函数和decode函数的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Oracle聚集函数排序

Oracle聚集函数排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于按照自定义聚集函数连

知识大全 Oracle随机函数调用

Oracle认证:Oracle随机函数调用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Oracl