zoukankan      html  css  js  c++  java
  • Group By 多个分组集小结 --GROUPING SETS,GROUP BY CUBE,GROUP BY ROLLUP,GROUPING(),GROUPING_ID()

    T-SQL 多个分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP, 其中 CUBE和ROLLUP可以当做是GROUPING SETS的简写版

    示例数据库下载:

    http://files.cnblogs.com/files/haseo/TSQL2012.rar

    GROUPING SETS

    列出所有你设置的分组集

    SELECT shipperid, YEAR(shippeddate) AS shipyear, COUNT(*) AS numorders
    FROM Sales.Orders
    GROUP BY GROUPING SETS
    (
    ( shipperid, YEAR(shippeddate) ),
    ( shipperid ),
    ( YEAR(shippeddate) ),
    ( )
    );


    CUBE

    列出所有可能的分组集

    SELECT  shipperid ,
            YEAR(shippeddate) AS shipyear ,
            COUNT(*) AS numorders
    FROM    Sales.Orders
    GROUP BY CUBE(shipperid, YEAR(shippeddate));
    1. ( shipperid, YEAR(shippeddate) )
    2. ( shipperid )
    3. ( YEAR(shippeddate) )
    4. ( )
     
    ROOLUP
    以层级的方式列出分组集
    SELECT  shipcountry ,
            shipregion ,
            shipcity ,
            COUNT(*) AS numorders
    FROM    Sales.Orders
    GROUP BY ROLLUP(shipcountry, shipregion, shipcity);
    1. ( shipcountry, shipregion, shipcity )
    2. ( shipcountry, shipregion )
    3. ( shipcountry )
    4. ( )
     

    GROUPING()
    该函数用来区分带入的元素是否属于分组的一部分, 返回0表示属于,1表示不属于

    SELECT  shipcountry ,
            GROUPING(shipcountry) AS grpcountry ,
            shipregion ,
            GROUPING(shipregion) AS grpcountry ,
            shipcity ,
            GROUPING(shipcity) AS grpcountry ,
            COUNT(*) AS numorders
    FROM    Sales.Orders
    GROUP BY ROLLUP(shipcountry, shipregion, shipcity);

    GROUPING_ID()

    该函数返回分组列的位图(学过二进制的小伙伴都懂的,8421...以此类推) ,如果是0则所有分组字段都是分组的一部分,如果某个分组字段不是分组集的一部分则返回对应数字(既相关二进制位置1),最后进行汇总。

    如下代码,如果shipcountry, shipregion, shipcity均是分组的一部分则返回0.  如果shipregion, shipcity 不在分组内,则是3 (0+2+1 )

    SELECT  GROUPING_ID(shipcountry, shipregion, shipcity) AS grp_id ,
            shipcountry ,
            shipregion ,
            shipcity ,
            COUNT(*) AS numorders
    FROM    Sales.Orders
    GROUP BY ROLLUP(shipcountry, shipregion, shipcity);
  • 相关阅读:
    SSL JudgeOnline 1194——最佳乘车
    SSL JudgeOnline 1457——翻币问题
    SSL JudgeOnlie 2324——细胞问题
    SSL JudgeOnline 1456——骑士旅行
    SSL JudgeOnline 1455——电子老鼠闯迷宫
    SSL JudgeOnline 2253——新型计算器
    SSL JudgeOnline 1198——求逆序对数
    SSL JudgeOnline 1099——USACO 1.4 母亲的牛奶
    SSL JudgeOnline 1668——小车载人问题
    SSL JudgeOnline 1089——USACO 1.2 方块转换
  • 原文地址:https://www.cnblogs.com/haseo/p/4299675.html
Copyright © 2011-2022 走看看