oracle数据库学习笔记(二)之分组统计查询
来源:互联网 发布:大数据预测股票 编辑:程序博客网 时间:2024/04/30 19:45
统计函数(分组函数)
在oracle里面对于统计函数提供有很多种,下面主要介绍标准的五个统计函数:
- 统计表中的数据量:COUNT(* | 字段 | DISTINCT 字段)
- 统计平均值: AVG(列)
- 求和:SUM(列)
- 最大值 :MAX(列)
- 最小值:MIN(字段)
对于以上的统计函数理论上是不区分数据类型的,但是实际来讲希望记住以下原则:
。COUNT():是作为数据表的记录数量统计的,一般情况下建议这个函数只设置不为空的列
。AVG()、SUM(): 是作为数据的统计结果的,所以建议使用数字咧
。MAX()、MIN():可以使用数字、字符串、日期完成统计
示例:统计所有雇员的数量、总工资、平均工资
SELECT COUNT(*),SUM(sal+NVL(comm,0)),AVG(sal+NVL(comm,0)) FROM emp ;示例:统计出最早和最晚的雇用日期
SELECT MAX(hiredate),MIN(hiredate) FROM emp ;思考题:请解释COUNT(*)、COUNT(字段)、COUNT(DISTINCT 字段)的区别?
|-在使用COUNT()函数的时候最简化的做法就是写上一个“*”,如果COUNT()使用的字段上不为null,那么COUNT(*)和COUNT(字段)没有区别
SELECT COUNT(*),COUNT(empno) FROM emp ;
|-如果字段上有null时候,使用COUNT(字段),则null的数据不进行统计,只统计出有数据的
SELECT COUNT(*),COUNT(comm) FROM emp;
|-如果不想统计重复数据的时候,使用COUNT(DISTINCT 字段)可以消除重复
SELECT COUNT(*),COUNT(mgr),COUNT(DISTINCT job) FROM emp ;
分组统计查询
如果要想进行分组统计查询,则其定义语法如下:④SELECT 列 [别名],列 [别名],列 [别名],... | 统计函数 , .... ①FROM 表1 [别名],表2 [别名],..... ②[WHERE 过滤条件(s)] ③[GROUP BY 分组字段 , ....] ⑤[ORDER BY 字段 [ASC | DESC],字段 [ASC | DESC],...]示例:按照部门进行分组,统计出每个部门的人数,平均工资
SELECT deptno,COUNT(*),AVG(sal) FROM emp GROUP BY deptno ;
提示:分组限制
。统计函数可以不结合GROUP BY单独使用,但是要求此时的SELECT子句中只能出现统计函数,而不能出现其他任何的字段错误代码正确代码SELECT empno,COUNT(*),AVG(sal) FROM emp ;SELECT COUNT(*),AVG(sal) FROM emp ;。在使用GROUP BY分组时候,SELECT子句中只能出现分组字段和统计函数,其他任何字段都不允许 出现
。分组时的统计函数可以嵌套使用,但是一旦嵌套使用则SELECT子句中不允许再出现任何的字段,包括分组字段
错误代码正确代码SELECT deptno,MAX(AVG(sal))FROM emp
GROUP BY deptno ;SELECT MAX(AVG(sal))
FROM emp
GROUP BY deptno ;
示例:查询出每个部门的名称、雇员人数、平均工资、最高工资
SELECT d.dname,COUNT(*),AVG(e.sal) FROM emp e,dept d WHERE e.deptno(+)=d.deptno GROUP BY d.dname ;
HAVING子句
此时执行顺序为
⑤SELECT 列 [别名],列 [别名],列 [别名],... | 统计函数 , ....①FROM 表1 [别名],表2 [别名],..... ②[WHERE 过滤条件(s)] ③[GROUP BY 分组字段 , ....] ④[HAVING 分组过滤] ⑥[ORDER BY 字段 [ASC | DESC],字段 [ASC | DESC],...]思考:关于HAVING 和WHERE 的区别
|- WHERE子句是在GROUP BY之前执行,而HAVING是在GROUP BY之后执行
|- WHERE可以单独使用,而HAVING必须结合GROUP BY一起使用
|- WHERE不允许使用统计函数,而HAVING可以使用统计函数
示例:查询出所有非销售人员的工资总和,并且要求满足从事同一工作的雇员工资的总和大于5000,显示的结果按照降序排列。
SELECT job,SUM(sal) sum FROM emp WHERE job<>'SALESMAN' GROUP BY job HAVING SUM(sal)>5000 ORDER BY sum DESC ;
- oracle数据库学习笔记(二)之分组统计查询
- Oracle基础学习二之统计函数及分组查询
- 数据库查询之(Ⅱ)统计、分组(排序)查询
- oracle数据库(统计函数和分组查询)
- Oracle高级查询之分组统计
- Oracle分组统计查询
- oracle分组统计查询
- 【oracle】分组统计查询
- Oracle学习之路(二):oracle多表查询+分组查询+子查询讲解与案例分析+经典练习题
- Oracle分组统计查询-分组查询
- 数据库学习笔记系列(5)——分组查询
- 数据库分类统计、分组查询
- Oracle数据库:左右连接、自然连接、交叉连接、统计函数以及分组查询(having子句)
- Oracle分组统计查询-统计函数
- Oracle 学习笔记之二 足球赛程统计问题
- Oracle之分组查询
- 数据库学习笔记(六)-联接查询和分组查询
- Wireshark使用方法(学习笔记二——查询统计)
- Linux下osip2+eXosip2的编译及开发
- Redhat7修复常见启动问题
- Uploadify 3.2 参数属性、事件、方法函数详解
- Android studio出现:Your project path contains non-ASCII characters.
- GoogLeNet计算量大小估算
- oracle数据库学习笔记(二)之分组统计查询
- Kali linux 挂载Windows的ntfs分区简解
- 什么是离散化 NOIP
- 关于PostgreSQL数据库中的information_schema
- 线程管理之pthread_equal
- 影像平滑(blur、GaussianBlur)
- (22)Air Band OpenCV2.4.13_图像金字塔
- Html5 基础----列表详述
- 【Javascript】实现快速,选择,冒泡,插入排序