group by 笔记

group by: 一般句子中都要有聚合函数


1. select 语句中要选择的列,要么是group by后面的列,要么是作为聚合函数中的参数

2. 在分组查询中要注意条件的运用: 分组之前的条件要用where,分组之后的条件要用having(group by分组后产生的结果,还需要再进行根据条件筛选,就要用having,having语句用在group by后面):

3. Group By 从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。重点是by后面的列名

4. Group by后面多个分组参数的理解:以两个参数为例:聚合函数为平均工资,说明中的所用到的“先分组”,是指先以xx为分组依据进行分组

i:whNum在前,sex在后, 先对sex分组,再对whNum分组----从右往左(从sex到whNum),如下图,

ii:sex在前,whNum在后,先分组whNum,再分组sex,如下图

5. group by: rollup(A,B)与cube(A,B):

    rollup(A,B)   先根据(A,B)进行group by,这个阶段,是从左往右进行分组,即,先分组A, 再分组B(和不带rollup的group by不同);

对(A,B)group by聚合后,再对A字段所列出的每个相同的记录再进行一个汇总,此例为对相同factory的记录进行汇总

最后对整个的记过记录进行一个汇总: NULL NULL 1300

(可以看到对每一个工厂都有一个小计行,最后对所有的有一个总计行。也可以这样理解

如果 ROLLUP(A,B)则先对 A,B进行 GROUP BY,之后对 A 进行 GROUP BY,最后对全表 GROUP BY。

如果 ROLLUP(A,B,C)则先对 A,B,C进行 GROUP BY ,然后对 A,B进行GROUP BY,再对 A 进行GROUP BY,最后对全表进行 GROUP BY)

  cube(A,B),先根据(A,B)进行group by,这个阶段,是从右往左进行分组,即,先分组B, 再分组A(和不带rollup的group by相同);

对(A,B)group by 聚合后,再对具有相同记录的B字段再进行一个汇总,再对A字段所列出的每个相同的记录再进行一个汇总,最后对整个的记过记录进行一个汇总

(如果 CUBE(A,B)则先对 A,B 进行 GROUP BY,之后对 A 进行 GROUP BY,然后对 B 进行 GROUP BY,最后对全表进行 GROUP BY.


   如果 CUBE(A,B,C)则先对 A,B,C 进行 GROUP BY,之后对 A,B ,之后对A,C ,之后对 B,C 之后对 A,之后对 B,之后对 C,最后对全表GROUP BY

group by,group by cube,group by rollup小结(以两个参数A,B为例):

(1)分组汇聚顺序

group by A,B:               右---->左

group by cube(A,B):    右---->左

group by rollup(A,B):  左---->右

(2)分组汇聚结果:在先group by后,

group by cube(A,B):      对A汇总:A| Null

                                       对B汇总:B| Null

                                      整体汇总:Null| Null

group by rollup(A,B):    对A汇总:A| Null

                                       整体汇总:Null| Null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值