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

  • 相关阅读:
    phoneGap
    backbonejs使用
    优化后的光标插件
    选择文本,范围
    js最佳继承范型
    深入理解事件捕获冒泡
    keyCode,charCode,which
    与IE奋战的血泪史
    【程序员的自我修养】如何使用IRC
    【程序员的自我修养】写给新手程序员的一封信
  • 原文地址:https://www.cnblogs.com/JhoneLee/p/2755034.html
Copyright © 2011-2022 走看看