zoukankan      html  css  js  c++  java
  • GROUPING

    只使用GROUP BY子句和聚合函数是无法同时得出小计合计的。如果想要同时得到,可以使用GROUPING运算符。

    合计行是不指定聚合键时得到的汇总结果。

    GROUPING 运算符包含以下3 种

    ●ROLLUP
    ●CUBE
    ●GROUPING SETS

    ⚪ ROLLUP的使用方法

    ROLLUP 是“卷起”的意思,名称也形象地说明了该操作能够得到像从小计到合计这样,从最小的聚合级开始,聚合单位逐渐扩大的结果。

    一个聚合键的情况:

      GROUP BY ROLLUP (某聚合键)  =  (一般情况)以下两种组合的汇总结果。      相当于下面的两个查询UNION起来

      ① GROUP BY ()
      ② GROUP BY (某聚合键)

      ①中的GROUP BY () 表示没有聚合键,也就相当于没有GROUP BY子句(这时会得到全部数据的合计行的记录),该合计行记录称为超级分组记录Super Group Row)。把它当作未使用GROUP BY 的合计行来理解超级分组记录的product_type列的键值(对DBMS 来说)并不明确,因此会默认使用NULL。

         

    两个聚合键的情况:

    GROUP BY ROLLUP (A聚合键, B聚合键)  =  (一般情况)以下三种组合的汇总结果。    相当于下面的三个查询UNION起来

        ① GROUP BY ()

        ② GROUP BY (A聚合键)

        ③ GROUP BY (A聚合键, B聚合键)

    对比不用ROLLUP,使用ROLLUP 时多出了最上方的合计行以及3 条不同商品种类的小计行(也就是未使用登记日期作为聚合键的记录),这4 行就是我们所说的超级分组记录。也就是说,该SELECT 语句的结果相当于使用UNION 对如上3 种模式的聚合级的不同结果进行连接。

    总结:ROLLUP可以同时得出合计和小计,是非常方便的工具。

    GROUPING 函数——用来判断超级分组记录的NULL 的特定函数

    该函数在其参数列的值为超级分组记录所产生的NULL 时返回1其他情况返回0。使用GROUPING函数能够简单地分辨出原始数据中的NULL和超级分组记录中的NULL。

    ⚪ CUBE——用数据来搭积木

    与ROLLUP 的结果相比,CUBE 的结果中多出了几行记录。

    多出来的记录就是只把regist_date 作为聚合键所得到的汇总结果。

    GROUP BY CUBE (A聚合键, B聚合键)  =  (一般情况)以下四种组合的汇总结果。

    ① GROUP BY ()
    ② GROUP BY (product_type)
    ③ GROUP BY (regist_date) ←添加的组合
    ④ GROUP BY (product_type, regist_date)

    所谓CUBE,就是将GROUP BY 子句中聚合键的“所有可能的组合”的汇总结果集中到一个结果中。因此,组合的个数就是2的n次幂(n 是聚合键的个数)。

    使用ROLLUP时组合的个数是n + 1。随着组合个数的增加,结果的行数也会增加,因此如果使用CUBE时不加以注意的话,往往会得到意想不到的巨大结果,ROLLUP的结果一定包含在CUBE的结果之中。

    总结:可以把CUBE理解为将使用聚合键进行切割的模块堆积成一个立方体。

     ⚪ GROUPING SETS——取得期望的积木

    GROUPING SETS 可以用于从ROLLUP 或者CUBE 的结果中取出部分记录。

    与ROLLUP 或者CUBE 能够得到规定的结果相对,GROUPING SETS 用于从中取出个别条件对应的不固定的结果。

  • 相关阅读:
    解决App can’t be opened because it is from an unidentified developer
    Mac之当前目录打开终端
    Mac之安装zsh
    毕业论文之降低重复率
    Latex之希腊字母表 花体字母 实数集
    latex之插入数学公式
    好句收集
    Python之两个列表一起打乱
    Python之时间统计
    Python之正则表达式
  • 原文地址:https://www.cnblogs.com/philipchan/p/14340313.html
Copyright © 2011-2022 走看看