在使用group by常用的基本函數(shù)包括min,max,avg,sum,count等,除了基本函數(shù)oracle中提供了一些高級(jí)分組函數(shù),
Rollup,Cube,Grouping,Grouping set,下面做詳細(xì)介紹:
rollup可以對(duì)分組列表中的首字段進(jìn)行再進(jìn)行分組統(tǒng)計(jì),例如
SELECT dep_id, job_id , SUM(salary) FROM emp GROUP BY ROLLUP(dep_id,job_id);
不僅會(huì)按照dep_id,job_id整體進(jìn)行分組,還會(huì)對(duì)dep_id進(jìn)行分組,以及(),即所有record進(jìn)行計(jì)算。
cube對(duì)分組列表中的所有字段組合進(jìn)行rollup
SELECT dep_id, job_id , SUM(salary) FROM emp GROUP BY CUBE(dep_id,job_id);
grouping返回0或1,表示當(dāng)前是否使用某字段進(jìn)行了分組統(tǒng)計(jì),在rollup或cube語(yǔ)句中
SELECT dep_id, job_id , SUM(salary),GROUPING(dep_id), GROUPING(job_id) FROM emp GROUP BY CUBE(dep_id,job_id) ORDER BY dep_id,job_id;
grouping set可以對(duì)多個(gè)分組集合進(jìn)行一起分組計(jì)算,但只需一次load表的數(shù)據(jù),其結(jié)果相當(dāng)于union all 單個(gè)分組結(jié)果。
SELECT dep_id, job_id , SUM(salary) FROM emp GROUP BY GROUPING SETS(dep_id,job_id,(dep_id,job_id));
SELECT dep_id, job_id , SUM(salary) FROM emp GROUP BY GROUPING SETS((dep_id,job_id),(dep_id),());和SELECT dep_id, job_id , SUM(salary) FROM emp GROUP BY ROLLUP(dep_id,job_id);結(jié)果是等價(jià)的。
聯(lián)系客服