zoukankan      html  css  js  c++  java
  • oracle group by rollup,decode,grouping,nvl,nvl2,nullif,grouping_id,group_id,grouping sets,RATIO_TO

    干oracle 047文章12当问题,经验group by 声明。因此邂逅group by  rollup,decode,grouping,nvl,nvl2,nullif,RATIO_TO_REPORT等一下。

    1. decode  与if...then,case...when...这类流数据语句功能差点儿相同

    decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

    该函数的含义例如以下:
    IF 条件=值1 THEN
        RETURN(值1)
    ELSIF 条件=值2 THEN
        RETURN(值2)
        ......
    ELSIF 条件=值n THEN
        RETURN(值n)
    ELSE
        RETURN(缺省值)
    END IF

     

    decode(字段或字段的运算,值1。值2,值3)

    这个函数执行的结果是。当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
    当然值1。值2,值3也能够是表达式

    ----比較大小

    select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
    sign()函数依据某个值是0、正数还是负数,分别返回0、1、-1

    ---依据固定值进行排序 order by

    select * from table_subject order by decode(subject_name, '语文', 1, '数学', 2, , '外语',3) ;

    2. group by rollup ,grouping,grouping_id,group_id,grouping set,GROUP BY CUBE聚合函数,还可參考OVER (PARTITION BY),这个是可返回多行的聚合函数,比較深一点,链接:http://blog.csdn.net/fengeh/article/details/24934437

    rollup:为每一个分组返回一个小计,同一时候为全部分组返回总计;
    比如:group by rollup(A,B)

    grouping 接收列作为參数,假设列为空,则grouping返回1,否则返回0。该函数与rollup搭配使用。
    比如:SQL> SELECT DECODE(GROUPING(EMP_ID), 1, '全部员工', EMP_ID) EMP_ID, 

     nvl2(emp_id,DECODE(GROUPING(MONTH), 1, '员工年度', MONTH),'全部员工年度') ND,
     SUM(AMOUNT)  FROM ALL_SALES  GROUP BY ROLLUP(EMP_ID, MONTH);

    GROUPING_ID()函数能够接受一列或多列,返回GROUPING位向量的十进制值。GROUPING位向量的计算方法是将依照顺序对每一列调用GROUPING函数的结果组合起来,GOURPING位向量计算,功能与grouping差点儿相同,格式为GROUPING_ID(字段A,字段B,字段C...)

    例如以下例所看到的

    grade         id          位向量      GROUPING_ID()返回值

    非空                     非空              00             0

    非空                     空                 01             1

    空                        非空              10             2

    空                        空                 11             3

    GROUP_ID() 唯一标识反复组,功能与grouping差点儿相同,只是此字段是依据是否有反复数据来推断的,反复数据就判为1,不反复则为0.

     

    grouping sets 类似于union all,不去重。用于group by后面,比如:
     group by grouping sets((STOCK_ID), (STOCK_ID, TYPE_CD, DISCOUNT)));

    整合全部可能性,比如:

    3.nvl nvl2 nullif 都是NULL字段的处理方法

    NULL指的是空值。或者非法值。
    NVL (expr1, expr2)->expr1为NULL。返回expr2;不为NULL,返回expr1。注意两者的类型要一致
    NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型
    NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1

    4.RATIO_TO_REPORT解析函数,经经常使用于百分比求数

    ratio_to_report(字段) OVER (PARTITION BY customer_id)    ------PARTITION BY等于group by

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    如何设置SQL Server 全文搜索
    怎么样充分运用ASP.NET 2.0预编译
    怎么样用CSC.exe来编译Visual C#地代码文件
    ASP.NET设计中的性能优化问题
    给Repeater、Datalist和Datagrid增加自动编号列
    ASP.net的RUL重写
    正则表达式学习日记
    SQLCLR(三)触发器
    几个用常用的jscript验证
    Asp.net性能优化总结(二)
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4872560.html
Copyright © 2011-2022 走看看