引用:http://blog.csdn.net/damenggege123/article/details/38794351
使用裏面的數據進行查詢來區別rollup()和rollup(())的使用。
select f_workarea, f_line, sum(f_pagesnumber) sum_pagesnumbers
from t_testcount
group by rollup(f_workarea, f_line);
返回結果
F_WORKAREA F_LINE SUM_PAGESNUMBERS
a a1 1
a a2 2
a a3 3
a 6
b b1 1
b 1
7
上面結果存在小計和總計
select f_workarea, f_line, sum(f_pagesnumber) sum_pagesnumbers
from t_testcount
group by rollup((f_workarea, f_line));
結果如下:
F_WORKAREA F_LINE SUM_PAGESNUMBERS
a a1 1
a a2 2
a a3 3
b b1 1
7
上面結果裏面明顯沒有小計,只有總計。
所以rollup()和rollup(())的區別即rollup(())只有總計而沒有小計。
如果沒有rollup(())怎麼實現只有總計沒有小計呢。
select *
from (select grouping(f_line) as a1,
grouping(f_workarea) as a2,
f_workarea,
f_line,
sum(f_pagesnumber) sum_pagesnumbers
from t_testcount
group by rollup(f_workarea, f_line)) t
where t.a1 = 0
and t.a2 = 0
or (t.a1 = 1 and t.a2 = 1)
結果如下:
A1 A2 F_WORKAREA F_LINE SUM_PAGESNUMBERS
0 0 a a1 1
0 0 a a2 2
0 0 a a3 3
0 0 b b1 1
1 1 7