在使用group by常用的基本函數(shù)包括min,max,avg,sum,count等,除了基本函數(shù)oracle中提供了一些高級分組函數(shù), Rollup,Cube,Grouping,Grouping set,下面做詳細(xì)介紹: rollup可以對分組列表中的首字段進(jìn)行再進(jìn)行分組統(tǒng)計(jì),例如 SELECT dep_id, job_id , SUM(salary) FROM emp GROUP BY ROLLUP(dep_id,job_id); 不僅會按照dep_id,job_id整體進(jìn)行分組,還會對dep_id進(jìn)行分組,以及(),即所有record進(jìn)行計(jì)算。 cube對分組列表中的所有字段組合進(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語句中 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可以對多個分組集合進(jìn)行一起分組計(jì)算,但只需一次load表的數(shù)據(jù),其結(jié)果相當(dāng)于union all 單個分組結(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é)果是等價的。 |
|