1、group by rollup基本用法
我们有时候在项目上看到group by rollup用法,其实就是对group by分组进行合计。
下面看一下例子
select count(1),c3 from t1 group by rollup(c3);
计划
从计划中解读亦是如此,另外可以从结果上进行分析
第21行的count其实就是前面20行的总和。
2、优化
计划中可以看到对表扫描两次,而从结果中可以明白是对group by总计,那我们其实可以改写成将前面20行进行sum
with temp as
(
select count(1) cnt,c3 from t1 group by c3
)
select * from temp
union all
select sum(cnt),null from temp;
这里将temp做成临时表,然后只扫描表t1一次,达到优化效果。
3、小结
这里主要利用的优化思维就是减少扫描次数。