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、小結
這里主要利用的優化思維就是減少掃描次數。