分组函数
通过今天学习分组函数,我们有以下的学习内容。
1、 什么是分组函数?
答:分组函数作用于一组数据,并对一组数据返回一个值。
2、 常见的分组函数有:
函数名称 | 函数描述 |
Count | 返回找到的记录数 |
Min | 返回一个数字列或计算列的最小值 |
Max | 返回一个数字列或计算列的最大值 |
Sum | 返回一个数字列或计算列总和 |
avg | 返回一个数字列或计算列的平均值 |
3、 avg(平均值)和sum(合计)函数
案例:SQL> select avg(sal),sum(sal) from emp;
4、 min(最小值)和max(最大值)函数
案例:SQL> select min(sal),max(sal) from emp;
5、 count(计数)函数
案例:SQL> select count(ename) from emp;
6、 distenct关键字:去掉重复的。
7、 分组数据:group by 子句语法
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 如果在查询的过程中需要按某一列的值进行分组,以统计该组内数据的信息时,就要使用group by子句。不管select是否使用了where子句都可以使用group by子句。
注意:group by子句一定要与分组函数结合使用,否则没有意义。
案例:
//求出每个部门的员工人数
SQL> select deptno,count(*) as "人数" from emp group by deptno;
//求出每个部门的员工的平均工资
SQL> select deptno,avg(nvl(sal,0)) from emp group by deptno;
//注意:group by 子句中的列不必包含在SELECT 列表中
SQL> select avg(nvl(sal,0)) from emp group by deptno;
//求出某个部门中相同职位的员工人数 group by 后可以跟多个分组的字段
SQL> select deptno,job,count(*) from emp group by deptno,job order by deptno;
8、 非法使用组函数
(1) 不能再where子句中使用组函数(注意!)
SQL> select deptno from emp where count(job)>0 group by deptno;
备注:ORA-00934: 此处不允许使用分组函数
(2) 可以在having子句中使用组函数
9、 过滤分组:having子句
使用having过滤分组:
(1) 行已经被分组
(2) 使用了组函数
(3) 满足having子句中条件的分组将被显示
AVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。
备注:having子句通常与group by子句结合使用
案例:
//查询部门的员工人数大于五部门编号
SQL> select deptno,count(*) from emp group by deptno having count(*)>5;
10、 嵌套函数
(1)函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置,函数遵循由内到外,由左到右的原则.
(2)嵌套函数可以包括在组函数中嵌套单行函数,或者组函数嵌套入单行函数或组函数中