oracle分组统计查询
2014-08-19 14:30
323 查看
常用统计函数
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是在分组后的限制
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是在分组后的限制
相关文章推荐
- oracle分组统计查询之后,获取数量最大的记录
- Oracle高级查询之分组统计
- 利用 GROUP BY 和 MAX 实现对表数据分组统计后的过滤查询(Oracle920)
- oracle 分组查询 子查询 统计查询 FROM加子查询临时表 查询高于平均工资 示例代码
- Oracle分组统计查询-统计函数
- Oracle基础学习二之统计函数及分组查询
- ORACLE分组查询和统计等
- Oracle分组统计查询-分组查询
- Oracle中select查询 分页 分组 统计语句
- Oracle基础学习二之统计函数及分组查询
- Oracle分组统计查询
- 【oracle】分组统计查询
- SQLserver 实现分组统计查询(按月、小时分组)
- 一段oracle中的“复杂”分组统计sql
- SQL语言多表查询、分组统计、子查询、数据表的更新操作、事务处理
- Oracle 按时间段分组统计
- 生气了按照时间段分组查询统计——shalfen
- ORACLE 统计分组语句
- Oracle中分组查询时keep的使用[转][最简][易懂]
- oracle 多表联合查询,统计查询,组函数,order by,having,子查询,集合运算