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

  • 相关阅读:
    c#中using System.Runtime.Serialization.Json;不能引用
    VS2013 当前不会命中断点还未为文档加载任何符号
    windows2008 设置会话超时时间
    服务没有及时响应启动或控制请求 1053
    IIS装好了无法访问localhost
    Shiro笔记——简介、 架构分析
    Java 连接使用 Redis
    Java 连接操作 Redis 出现错误
    网络方面的常用命令 & 常用端口介绍
    Redis 配置文件及命令详解
  • 原文地址:https://www.cnblogs.com/JhoneLee/p/2755034.html
Copyright © 2011-2022 走看看