/******************
*rollup函式的使用
******************/
案例1需求:
× 統計每個部門每個職位的薪水和
× 統計每個部門所有職位的薪水小計
× 統計所有部門所有職位的薪水合計
× 需要顯示部門名、職位名和累加後的薪水
--需求1
select d.dname, e.job, sum(e.sal) sum_sal
from dept d, emp e
where d.deptno = e.deptno
group by d.dname, e.job
union all
--需求2
select d.dname, null, sum(e.sal) sum_sal
from dept d, emp e
where d.deptno = e.deptno
group by d.dname
union all
--需求3
select null, null, sum(e.sal) sum_sal
from dept d, emp e
where d.deptno = e.deptno;
--使用rollup分組
select d.dname, e.job, sum(e.sal) as sum_sal
from dept d, emp e
where d.deptno = e.deptno
group by rollup(d.dname, e.job);
rollup(d.dname, e.job)的分組過程是:
1)標準分組:group by (d.dname, e.job),對每個部門每個職位進行分組
2)從右到左遞減:group by (d.dname, null),其實這個null沒有必要使用,這裡只是為了
方便分析。這個過程是對上乙個級別分組的小計,也就是對每個dname值,計算橫跨所有
job的小計。
3)最後合計:相當於 group by (null,null).
上面的rollup只用了兩個列,如果有n個列,那麼結果就是n+1中group by的組合,
另外,在rollup操作是,如果使用hint:expand_gset_to_union,則優化器會將rollup轉為
對應的union all操作。
案例2
需求 × 計算每個入職時間(年)、部門、職位的標準分組的薪水和;
× 計算每個入職時間(年)、部門的所有職位的薪水小計;
× 計算每個入職時間(年)的所有部門所有職位的薪水小計。
× 最後合計薪水,顯示入職時間(年)、部門名、職位名
select to_char(e.hiredate, ' yyyy') hire_year,
d.dname,
e.job,
sum(sal) sum_sal
from dept d, emp e
where d.deptno = e.deptno
group by rollup(to_char(e.hiredate, ' yyyy'), d.dname, e.job)
solr分組查詢GROUP
order處理 if order params sort order group處理 if group else 執行查詢 response this search where,limit start,limit end,params 引數 型別說明 group 布林值設為true,表示結果需要分組...
記錄下mysql的分組聚合函式group by
今天維護客戶的儲存過程時發現乙個問題,連鎖客戶只有銷售明細表,沒訂單表,而公司要求寫查詢訂單的儲存過程,客戶那邊使用的資料是sqlserver,我使用了分組聚合函式group by 例如 這樣子寫sqlserver會報錯,因為group by 要求查詢的字段也得包含在聚合函式裡。select ord...
關於MongoDB的group分組
關於mongodb的group分組 測試條件 windows mongodb 1.8.2 先插入測試資料 for var i 1 i 20 i 1.普通 分組查詢 db.test.group initial reduce function doc,prev db.runcommand initial...