zoukankan      html  css  js  c++  java
  • sql中 with rollup 、with cube、grouping 统计函数用法

    with rollup 、with cube、grouping
    CUBE 和 ROLLUP 之间的区别在于:
    CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
    ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
    grouping:
    当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。

    (GROUPING这个函数是反映目标列是否聚合,如何聚合则返回1,否则返回0)


    --例如
    DECLARE@TTABLE(名称 VARCHAR(1) , 出版商 VARCHAR(10),  价格1  INT, 价格2 INT)
    INSERT@T
    SELECT'a''北京'1122UNIONALL
    SELECT'a''四川'2233UNIONALL
    SELECT'b''四川'1223UNIONALL
    SELECT'b''北京'1020UNIONALL
    SELECT'b''昆明'2030
    SELECT
    名称,
    出版商,
    SUM(价格1) AS 价格1,
    SUM(价格2) AS 价格2,
    GROUPING(名称) AS CHECK名称,
    GROUPING(出版商) AS CHECK出版商
    FROM@TGROUPBY 名称,出版商 WITH CUBE

    /*
    名称   出版商        价格1         价格2         CHECK名称 CHECK出版商
    ---- ---------- ----------- ----------- ------- --------
    a    北京         11          22          0       0
    a    四川         22          33          0       0
    a    NULL       33          55          0       1
    b    北京         10          20          0       0
    b    昆明         20          30          0       0
    b    四川         12          23          0       0
    b    NULL       42          73          0       1
    NULL NULL       75          128         1       1
    NULL 北京         21          42          1       0
    NULL 昆明         20          30          1       0
    NULL 四川         34          56          1       0
    (所影响的行数为 11 行)
    */
    --分析
    /*
    group by 两列:名称有两个类别A,B;所有由CUBE运算而生成行的是
    名称   出版商        价格1         价格2         CHECK名称 CHECK出版商
    ---- ---------- ----------- ----------- ------- --------
    a    NULL       33          55          0       1
    b    NULL       42          73          0       1
    出版商有三个类别,所有由CUBE运算而生成行的是
    名称   出版商        价格1         价格2         CHECK名称 CHECK出版商
    ---- ---------- ----------- ----------- ------- --------
    NULL 北京         21          42          1       0
    NULL 昆明         20          30          1       0
    NULL 四川         34          56          1       0
    以及
    NULL NULL       75          128         1       1
    */

    SELECT
    名称,
    出版商,
    SUM(价格1) AS 价格1,
    SUM(价格2) AS 价格2
    FROM@TGROUPBY 名称,出版商 WITH ROLLUP

    /*
    名称   出版商        价格1         价格2
    ---- ---------- ----------- -----------
    a    北京         11          22
    a    四川         22          33
    a    NULL       33          55
    b    北京         10          20
    b    昆明         20          30
    b    四川         12          23
    b    NULL       42          73
    NULL NULL       75          128
    */

  • 相关阅读:
    what is NSParameterAssert?
    scrollView的几个属性contentSize contentOffset contentInset
    Explain awakeFromNib, initwithFrame usage
    strong、weak、unsafe_unretained(ARC);retain
    iOS 面试记(二)
    Python 编程规范 by @AKaras
    Python 的类的下划线命名
    Python中数值和进制转换
    Python基本运算符
    Ubuntu Linux系统下轻松架设nginx+php服务器应用
  • 原文地址:https://www.cnblogs.com/sunzhenyong/p/3478034.html
Copyright © 2011-2022 走看看