Group by rollup(A ,B) 产生的分组种数:3种; 第一种:group by A,B 第二种:group by A 第三种:group by NULL (说明:本没有group by NULL 的写法,在这里指是为了方便说明,而采用之。含义是:没有分组,也就是所有数据做一个统计。例如聚合函数是SUM的话,那就是对所有满足条件的数据进行求和。此写法的含义下同) 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。 Group by rollup(A ,B,C) 产生的分组种数:4种; 第一种:group by A,B,C 第二种:group by A,B 第三种:group by A 第四种:group by NULL
就是分组之后的统计里有一个汇总统计,如Group by rollup(A ,B) 先将相同A和B的记录汇总,然后再将相同A的记录再汇总,最后就是将所有数据汇总
SQL>
SQL> create table test(
2 a varchar(10),
3 b varchar(10),
4 c varchar(10),
5 d varchar(10),
6 e int,
7 f int
8 );
Table created
SQL> begin
2 insert into test values('A1', 'B1', 'C1', 'D1', 100, 100);
3 insert into test values('A1', 'B2', 'C1', 'D1', 200, 200);
4 insert into test values('A2', 'B1', 'C1', 'D1', 300, 100);
5 end;
6 /
PL/SQL procedure successfully completed
SQL> select a, b, c, d, sum(e), sum(f) from test group by rollup(a, b), c, d;
A B C D SUM(E) SUM(F)
---------- ---------- ---------- ---------- ---------- ----------
A1 B1 C1 D1 100 100 -- A1, B1 汇总
A1 B2 C1 D1 200 200 -- A1, B2 汇总
A1 C1 D1 300 300 -- A1 汇总
A2 B1 C1 D1 300 100 -- A2, B1 汇总
A2 C1 D1 300 100 -- A2 汇总
C1 D1 600 400 -- 总合计行
6 rows selected
SQL> drop table test purge;
Table droppedSQL>
产生的分组种数:3种;
第一种:group by A,B
第二种:group by A
第三种:group by NULL
(说明:本没有group by NULL 的写法,在这里指是为了方便说明,而采用之。含义是:没有分组,也就是所有数据做一个统计。例如聚合函数是SUM的话,那就是对所有满足条件的数据进行求和。此写法的含义下同)
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
Group by rollup(A ,B,C)
产生的分组种数:4种;
第一种:group by A,B,C
第二种:group by A,B
第三种:group by A
第四种:group by NULL
先将相同A和B的记录汇总,然后再将相同A的记录再汇总,最后就是将所有数据汇总