with rollup通常是与group by一起使用的。group by通过指定一个或多个列,对查询结果进行分组。
例如:
select A, B, count(*) as C
from........... ............
group by A, B
with rollup;
注意这里使用的聚合函数为count(*)。结尾进一步说明。
此例中 with rollup 作用:
对在分组基础上的查询结果进行汇总处理。之所以是汇总处理,是因为聚合函数是count(*)。
与不加with rollup相比,多了几行:
A | B | C |
---|---|---|
A的一个字段值,假设是A1 | NULL | A= A1的行数 |
A的一个字段值,假设是A2 | NULL | A= A2的行数 |
A的一个字段值,假设是An | NULL | A= An的行数 |
NULL | NULL | 总行数 |
说明:
1.A字段有n种字段值,就多n+1行。
2.所产生的汇总行中,对应具有不同列值的字段值写为NULL。以上表中,A= A1时,B有很多种列值,所以写为NULL。
3.若group by只对一个字段分组,例如group by A,那么就只多一行,内容为:NULL | 总数
4.若聚合函数是avg(),如avg(X) as C,那么with rollup就是对分组里的所有内容求平均值,C就是平均值。如果是count(*),C就是总数。