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