oracle分组函数、临时表

2014-11-24 16:12:06 · 作者: · 浏览: 0
oracle分组函数、临时表
一.分组函数
max min avg count sum
1,整个结果集是一个组
   1) 求部门30 的最高工资,最低工资,平均工资,总人数,有工作的人数,工种数量及工资总和 
     select max(ename),max(sal), 
     min(ename),min(sal), 
     avg(sal), 
     count(*) ,count(job),count(distinct(job)) , 
     sum(sal) from emp where deptno=30; 
2, 带group by 和 having 的分组 
   1)按部门分组求最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和 
    select deptno, max(ename),max(sal), 
    min(ename),min(sal), 
    avg(sal), 
    count(*) ,count(job),count(distinct(job)) , 
    sum(sal) from emp group by deptno; 
   
   2)部门30的最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和 
    select deptno, max(ename),max(sal), 
    min(ename),min(sal), 
    avg(sal), 
    count(*) ,count(job),count(distinct(job)) , 
    sum(sal) from emp group by deptno having deptno=30; 
   
3, stddev 返回一组值的标准偏差 
    select deptno,stddev(sal) from emp group by deptno; 
    variance 返回一组值的方差差 
    select deptno,variance(sal) from emp group by deptno; 

4, 带有rollup和cube操作符的Group By 
    rollup 按分组的第一个列进行统计和最后的小计 
    cube 按分组的所有列的进行统计和最后的小计 
    select deptno,job ,sum(sal) from emp group by deptno,job; 
    select deptno,job ,sum(sal) from emp group by rollup(deptno,job); 
    cube 产生组内所有列的统计和最后的小计 
    select deptno,job ,sum(sal) from emp group by cube(deptno,job); 

二、临时表
只在会话期间或在事务处理期间存在的表.
临时表在插入数据时,动态分配空间
   create global temporary table temp_dept 
   (dno number, 
   dname varchar2(10)) 
   on commit delete rows; 
   insert into temp_dept values(10,'ABC'); 
   commit; 
   select * from temp_dept; --无数据显示,数据自动清除 
   on commit preserve rows:在会话期间表一直可以存在(保留数据) 
   on commit delete rows:事务结束清除数据(在事务结束时自动删除表的数据)