常用统计函数
COUNT(*|[DISTINCT]列):求出全部记录数
SUM(列):求出总和
AVG(列):平均值
MAX(列):最大值
MIN(列):最小值
MEDIAN(列):中间值
VARIANCE(列):方差
STDDEV(列):标准差
例:select COUNT(*),SUM(sal),AVG(sal),MAX(sal),MIN(sal),MEDIAN(sal),VARIANCE(sal),STDDEV(sal) from emp;
注意:COUNT()函数表中没有数据时返回0,其他函数返回NULL,COUNT(字段)如果字段上有null,将不会被统计在内。
单字段分组统计查询
语法:GROUP BY 分组字段
例如:select deptno,COUNT(*) from emp GROUP BY deptno;
注意一:如果没有GROUP BY子句,SELECT子句中只允许出现统计函数,其他任何字段都不允许出现。
错误示范:select deptno,COUNT(empno) from emp;---------不能执行
注意二:在统计查询中,SELECT子句后只允许出现分组字段和统计函数,其他的非分组字段不能使用。
错误示范:select deptno,ename,COUNT(empno) from emp GROUP BY deptno;其中ename不属于统计字段,所以出错
注意三:统计函数允许嵌套使用,但嵌套后的SELECT子句中不允许再出现任何字段。
错误示范:select deptno,MAX(AVG(sal)) from emp GROUP BY deptno;
多字段分组统计查询
语法:GROUP BY 分组字段1,分组字段2
例如:select d.deptno,d.dname,d.loc NVL(COUNT(e.empno),0) count,NVL(ROUND(AVG(sal),2),0) avg,NVL(SUM(sal),0) sum,NVL(MAX(sal),0) max,NVL(MIN(sal),0) min
from emp e,dept d where e.deptno(+)=d.deptno GROUP BY d.deptno,d.dname,d.loc;
HIVING子句
语法:HAVING 过滤条件(s)
例如:select job,ROUND(AVG(sal),2),COUNT(empno) from emp GROUP BY job HAVING AVG(sal)>2000;
注意:where是分组前的限制,HAVING是在分组后的限制