七。分组函数2 U- u y, w1 l! ~1 Q
max min avg count sum
5 |0 g. G; i* F6 @' x 1,整个结果集是一个组
) @) i" {! Q) h8 a 1) 求部门30 的最高工资,最低工资,平均工资,总人数,有工作的人数,工种数量及工资总和- A! n6 l! b6 F& c z# A! n, w
select max(ename),max(sal)," `: j2 o- [& _4 L7 A, d* E) M
min(ename),min(sal),
* b% p/ I0 D" K$ V' k" ^2 y& ]+ L avg(sal),
& P7 \9 n |1 \ l3 ]7 o count(*) ,count(job),count(distinct(job)) ,
1 y0 U$ j% S3 @6 V1 d2 e; Y: r# ^3 h2 n sum(sal) from emp where deptno=30;
3 u7 {' u7 l! a4 R 2, 带group by 和 having 的分组3 h- T+ O' t3 ?! Z
1)按部门分组求最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和' q3 Z7 |2 |, X% L6 O
select deptno, max(ename),max(sal),
: t5 ^0 Q) r0 A# q/ T min(ename),min(sal),
8 j. C6 I- r9 K- k! b' J4 u8 t" n4 w avg(sal)," n n' P- A+ G# `& H
count(*) ,count(job),count(distinct(job)) ,' k) U" z' w1 |; f; z- G
sum(sal) from emp group by deptno;
0 a, [6 }" u1 G# n# N3 `" ]6 N 2)部门30的最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和
. C8 O ~- O: {/ P2 S select deptno, max(ename),max(sal),
) }0 V% X4 K- n7 B* W min(ename),min(sal),( |4 p$ W9 s6 e9 G! }/ v. |
avg(sal),
6 t+ [% u7 |& j4 t count(*) ,count(job),count(distinct(job)) ,$ v7 N8 q( s3 S
sum(sal) from emp group by deptno having deptno=30;
0 ~! s& m% Z/ u$ y; {9 n8 E 3, stddev 返回一组值的标准偏差2 ]0 L G' t% _% G
select deptno,stddev(sal) from emp group by deptno;
% A6 H4 O* W4 I& \ z. H variance 返回一组值的方差差& i% `0 ~& g8 {5 k1 s6 ~( n
select deptno,variance(sal) from emp group by deptno;& \6 H" I- ^- P9 u1 \* b7 V
4, 带有rollup和cube操作符的Group By
" Z* l1 |' x0 x3 t; [5 d2 W rollup 按分组的第一个列进行统计和最后的小计
" Y }- w: {) p, [2 i: T3 ?0 R5 e' y cube 按分组的所有列的进行统计和最后的小计
5 k" K# Y( G* f7 Y) U select deptno,job ,sum(sal) from emp group by deptno,job;1 U5 ^" t+ q" t, [# L# Z2 i
select deptno,job ,sum(sal) from emp group by rollup(deptno,job);
w3 Q6 J/ N$ p9 B cube 产生组内所有列的统计和最后的小计
7 C7 z/ O4 W F- E4 _+ T$ ^1 B select deptno,job ,sum(sal) from emp group by cube(deptno,job);
9 k( P! U8 }# H" D4 F$ f5 Y 八、临时表
( z0 R$ E0 g$ t( o& s7 a 只在会话期间或在事务处理期间存在的表。- }6 I: T6 H+ q9 O
临时表在插入数据时,动态分配空间
B- _7 z8 }2 j4 X8 _5 o3 ~' s create global temporary table temp_dept
& ~$ g. ~$ ^& a G3 a# c! C; \ (dno number,1 q5 b* _7 J8 r
dname varchar2(10))
' x' g( o2 }$ _ on commit delete rows;+ v( }: t+ Z* g. A' v7 U! y
insert into temp_dept values(10,'ABC');
/ t/ l. v1 X3 [# d" I3 z commit;& E% ^% W4 [. P# C7 v0 W! S; E
select * from temp_dept; --无数据显示,数据自动清除
* W5 S; I, b9 U; Z( g on commit preserve rows:在会话期间表一直可以存在(保留数据)7 v& X' Z! X. k- |4 Z/ i% y1 {
on commit delete rows:事务结束清除数据(在事务结束时自动删除表的数据) |