日期:2014-05-17 浏览次数:20806 次
http://www.itpub.net/viewthread.php?tid=608107&extra=&page=1 oracle分析函数 oracle分析函数 zhouwf0726 | 25 七月, 2006 12:51 oracle分析函数--SQL*PLUS环境 --1、GROUP BY子句 --CREATE TEST TABLE AND INSERT TEST DATA. create table students (id number(15,0), area varchar2(10), stu_type varchar2(2), score number(20,2)); insert into students values(1, '111', 'g', 80 ); insert into students values(1, '111', 'j', 80 ); insert into students values(1, '222', 'g', 89 ); insert into students values(1, '222', 'g', 68 ); insert into students values(2, '111', 'g', 80 ); insert into students values(2, '111', 'j', 70 ); insert into students values(2, '222', 'g', 60 ); insert into students values(2, '222', 'j', 65 ); insert into students values(3, '111', 'g', 75 ); insert into students values(3, '111', 'j', 58 ); insert into students values(3, '222', 'g', 58 ); insert into students values(3, '222', 'j', 90 ); insert into students values(4, '111', 'g', 89 ); insert into students values(4, '111', 'j', 90 ); insert into students values(4, '222', 'g', 90 ); insert into students values(4, '222', 'j', 89 ); commit; col score format 999999999999.99 --A、GROUPING SETS select id,area,stu_type,sum(score) score from students group by grouping sets((id,area,stu_type),(id,area),id) order by id,area,stu_type; /*--------理解grouping sets select a, b, c, sum( d ) from t group by grouping sets ( a, b, c ) 等效于 select * from ( select a, null, null, sum( d ) from t group by a union all select null, b, null, sum( d ) from t group by b union all select null, null, c, sum( d ) from t group by c ) */ --B、ROLLUP select id,area,stu_type,sum(score) score from students group by rollup(id,area,stu_type) order by id,area,stu_type; /*--------理解rollup select a, b, c, sum( d ) from t group by rollup(a, b, c); 等效于 select * from ( select a, b, c, sum( d ) from t group by a, b, c union all select a, b, null, sum( d ) from t group by a, b union all select a, null, null, sum( d ) from t group by a union all select null, null, null, sum( d ) from t ) */ --C、CUBE select id,area,stu_type,sum(score) score from students group by cube(id,area,stu_type) order by id,area,stu_type; /*--------理解cube select a, b, c, sum( d ) from t group by cube( a, b, c) 等效于 select a, b, c, sum( d ) from t group by grouping sets( ( a, b, c ), ( a, b ), ( a ), ( b, c ), ( b ), ( a, c ), ( c ), () ) */ --D、GROUPING /*从上面的结果中我们很容易发现,每个统计数据所对应的行都会出现null, 如何来区分到底是根据那个字段做的汇总呢,grouping函数判断是否合计列!*/ select decode(grouping(id),1,'all id',id) id, decode(grouping(area),1,'all area',to_char(area)) area, decode(grouping(stu_type),1,'all_stu_type',stu_type) stu_type, sum(score) score from students group by cube(id,area,stu_type) order by id,area,stu_type; --2、OVER()函数的使用