魅族自带输入法:GROUP BY子句(rollup,cube,grouping sets)实例说明

来源:百度文库 编辑:九乡新闻网 时间:2024/05/03 08:56:11
GROUP BY子句(rollup,cube,grouping sets)实例说明 

将通过实例来说明group by子句的3种样式的作用:


1.GROUP BY
语句:
        select zt,qylx_dm,sum(zczb),count(bs) from dj_zt group by zt,qylx_dm
结果:

可见,group by zt,qylx_dm的作用是,先对ZT进行分组,在同一ZT下,对QYLX_DM进行分组。

2.GROUP BY ROLLUP
语句:
         select zt,qylx_dm,sum(zczb),count(bs) from dj_zt group by rollup(zt,qylx_dm)
   结果:

可见,group by rollup(zt,qylx_dm)的作用是,先对ZT进行分组,输出按状态分组的结果(第2行,第3行),然后再按照ZT分组,并对分组后的ZT按照 QYLX_DM进行再分组,输出结果(第4到9行);在第一行输出统计的总和(1=2+3=4+5+6+7+8+9)。即他是将同一结果集按照不同的分组条件分别输出了2次。

3.GROUP BY CUBE
语句:
        select zt,qylx_dm,sum(zczb),count(bs) from dj_zt group by cube(zt,qylx_dm)
   结果:

可见,GROUP BY CUBE(ZT,QYLX_DM)的作用是:先按照QYLX_DM分组,输出(1,2,3,4,5行);然后输出合计(6行);然后按照ZT分组,输出(7,8行);然后在按照ZT和QYLX_DM分组输出(9-14行)。即,其实他是将同一结果集按照3种条件分别GROUP并输出了3次。

    4.GROUP BY GROUPING SETS
    语句:
        select zt,qylx_dm,sum(zczb),count(bs) from dj_zt group by grouping sets(zt,qylx_dm)
    结果:

可见此时其作用等同于CUBE的前2次分组。缺失了第三次分组(即同时按照ZT和QYLX_DM分组)和合计行。
其实GROUP BY GROUPING SETS也是可以输出合计的,只需要加一对空括号即可:
        select zt,qylx_dm,sum(zczb),count(bs) from dj_zt group by grouping sets(zt,qylx_dm,())
   结果:

其中空括号的位置是没有影响的。而且合计行必然位于第一行。