轉發:http://www.cnblogs.com/xiaotuni/archive/2011/12/01/2365670.html
現在有一張 employee2表。
- select grouping(t.division_id) a, grouping(t.job_id) b, t.division_id, t.job_id
- from employees2 t
- group by rollup(t.division_id,t.job_id);
- select grouping(t.division_id) a, grouping(t.job_id) b,
- decode(grouping(t.division_id),1,'all division',division_id)division_id,
- decode(grouping(t.job_id),1,'all job',t.job_id) job_id,sum(t.salary)
- from employees2 t
- group by rollup(t.division_id,t.job_id)
rollup 是用來進行分組的。
rollup(t.division_id,t.job_id) 這句話是,的意思是 先讓 rollup(t.job_id)進行分組統計出結果,然後再對 rollup(t.division_id,t.job_id) 這兩列進行分組統計出結果。
grouping(division_id) 如果 返回值是 1 的話,那麼此行是統計出來的,否則就是正常的數據行。
此兩個函數主要是用來生成報表的時候,在最後要按分組統計時用到。