一、簡要介紹
- rollup用于分組統計,也屬于oracle分析函數的一種,同理:grouping也是;
-
假設有n個次元,那麼rollup會有n個聚合,cube會有2n個聚合
rollup統計列
rollup(a,b) 統計列包含:(a,b)、(a)、()
rollup(a,b,c) 統計列包含:(a,b,c)、(a,b)、(a)、()
二、實踐過程
select a.deptname name, sum(b.sal) total
from dept a, emp b
where a.deptno = b.deptno
group by a.deptname
union all
select null,sum(b.sal)
from dept a, emp b
where a.deptno = b.deptno;
等同于:
select a.deptname, sum(b.sal)
from dept a, emp b
where a.deptno = b.deptno
group by rollup(a.deptname);
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSPZpmTys2VaNHbXp1c5cVWwh2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5cDN2EDNzEjMwIjMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
select a.deptname name, b.job, sum(b.sal) total
from dept a, emp b
where a.deptno = b.deptno
group by rollup(a.deptname, b.job)
select case grouping(a.deptname)
when 1 then
'總計'
else
a.deptname
end as dname,
case grouping(b.job)
when 1 then
'分計'
else
b.job
end as job,
sum(b.sal) total
from dept a, emp b
where a.deptno = b.deptno
group by rollup(a.deptname, b.job)