自己写好记的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

原文地址:https://www.cnblogs.com/JhoneLee/p/2755034.html