zoukankan      html  css  js  c++  java
  • 自己写好记的Oracle的 Group By 、 Group By Rollup和Group By Cube基础

         在ASP.NET的开发中不免得要和数据库打交道,而Oracle是不能不掌握的。(我就吃了学校的亏,在学校上学的时候都不知道Oracle长什么样)

         在统计的时候Group By 、 Group By Rollup和Group By Cube这三个是最长用的,但是对于初学者来说搞清它们有点难度,所以我把我的认识过程记下来,希望对有同样苦恼的人有所帮助。

        

    1.Group By

    描述

    用途 :只用于数据分组而不用于数据排序

    例:表table

    ID

    NUM

    1

    22

    1

    23

    2

    22

      SELECT ID,NUM FROM table GROUP BY NUM 报错,因为ID没有分组

      SELECT COUNT(ID),NUM FROM table GROUP BY ID报错,因为NUM没有分组

      SELECT COUNT(ID),ID FROM table GROUP BY ID

    COUNT(ID)

       ID

        2

        1

        1

        2

       SELECT COUNT(ID),NUM FROM table GROUP BY NUM

              

    COUNT(ID)

       NUM

        2

        22

        1

        23

    2.Group By Rollup

    描述:依据分组对数据进行统计,用于求和或计数

    理解:在GROUPING_ID(条件1,条件2)中有两个条件,ROLLUP对条件1情有独钟,分组时按照 (条件1 ,条件2),条件1,没条件 这三个顺序分组,ROLLUP的返回值分别为(0,0)、(0,1)和(1,1) 。以此为二进制算出GROUP BY ROLLUP 的返回值 0、1、3(当然了这只是两个条件,三个条件时为(条件1,条件2,条件3)、(条件1,条件2)、条件1、没条件  三个以上以此类推)

    例:

          GROUP

         NUM

    001

    23

    001

    22

    002

    23

    002

    22

    SELECT GROUP,NUM,GROUPING_ID(GROUP,NUM) ROLLUP,COUNT(GROUP) FROM table GROUP BY ROLLUP(GROUP,NUM) ORDER BY ROLLUP,GROUP

    结果:

    GROUP

    NUM

    ROLLUP

    COUNT(NUM)

    001

    23

    0

    1

    001

    22

    0

    1

    002

    23

    0

    1

    002

    22

    0

    1

    001

    1

    2

    002

    1

    2

    3

    4

    如果GROUPING_ID中的条件互换位置,结果不同:

           

    GROUP

    NUM

    ROLLUP

    COUNT(NUM)

    001

    23

    0

    1

    001

    22

    0

    1

    002

    23

    0

    1

    002

    22

    0

    1

    23

    1

    2

    22

    1

    2

    3

    4

    3.Group By Cube

    描述:依据分组对数据进行统计,用于求和或计数

    理解:在GROUPING_ID(条件1,条件2)中有两个条件,CUBE则充分体现分组的公平性,分组时按照 (条件1 ,条件2),条件1,条件2,没条件 这四个顺序分组,CUBE的返回值分别为(0,0)、(0,1)、(1,0)和(1,1) 。依次返回GROUP BY CUBE 的值为0、1、2、3(当然了这只是两个条件,三个条件时为(条件1,条件2,条件3)、(条件1,条件2)、(条件1,条件3)、条件1、(条件2,条件3)、条件2、条件3、没条件  三个以上以此类推)

    例:

          GROUP

         NUM

    001

    23

    001

    22

    002

    23

    002

    22

    SELECT GROUP,NUM,GROUPING_ID(GROUP,NUM) CUBE,COUNT(GROUP) FROM table GROUP BY ROLLUP(GROUP,NUM) ORDER BY CUBE,GROUP

    结果:

    GROUP

    NUM

    CUBE

    COUNT(NUM)

    001

    23

    0

    1

    001

    22

    0

    1

    002

    23

    0

    1

    002

    22

    0

    1

    001

    1

    2

    002

    1

    2

    23

    2

    2

    22

    2

    2

    3

    4

    如果GROUPING_ID中的条件互换位置,结果不同:

           

    GROUP

    NUM

    CUBE

    COUNT(NUM)

    001

    23

    0

    1

    001

    22

    0

    1

    002

    23

    0

    1

    002

    22

    0

    1

    23

    1

    2

    22

    1

    2

    001

    2

    2

    002

    2

    2

    3

    4

  • 相关阅读:
    java 如何读取jar包外的properties文件(转)
    window.showModalDialog()之返回值
    Java web.xml随笔
    如何获取业务表中各位业务员的业务类型A与业务类型B的业务金额
    web.config Web配置文件(*.config)
    Eclipse常用捷键
    css圆角效果
    回车键事件
    WCF学习 之旅
    validation
  • 原文地址:https://www.cnblogs.com/JhoneLee/p/2755034.html
Copyright © 2011-2022 走看看