分组函数
2.1、什么叫分组函数
聚合函数也叫分组函数,有的也叫集合函数,它的数据源一般来自多组数据,但返回的时候一般是一组数据,聚合函数对一组行中的某个列执行计算并返回单一的值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用,所以有的时候也把其称之为分组函数
笔记:定义:对一组(多行)数据的处理计算并返回一行数据
2.1、分类
| 函数名称 | 返回值(结果)类型 | 说明 | |
|---|---|---|---|
| SUM(DISTINCT\ | ALL 列名) | 数值 | 对所有数值求和 |
| COUNT(DISTINCT\ | ALL 列名) 或者 COUNT(*) | 数值 | 计数,求数据行数 |
| MAX(DISTINCT\ | ALL 数值日期列) | 数值 | 求最大值 |
| MIN(DISTINCT\ | ALL 数值日期列) | 数值 | 求最小值 |
| AVG(DISTINCT\ | ALL 数值列) | 数值 | 求平均值 |
2.2、 SUM(求总和)
2.2.1、 说明
ALL表示对所有值求和
DISTINCT表示只对不同值求和(相同值只取一次)
2.2.2、示例代码
计算雇员姓名为 'SMITH'和 'ALLEN' 两个人的基本薪资和
SELECT SUM(sal) FROM emp WHERE ename IN('SMITH','ALLEN');
2.3、 COUNT(统计行数)
2.3.1、 说明
ALL对所有记录,数组做统计 (默认)
DISTINCT只对不同值统计(相同值只取一次)
COUNT(DISTINCT | ALL 列名) ---------会忽略null值进行统计
或者 COUNT(*) --------------------------------不需要考虑null值问题(开发使用较多)
2.3.2、 示例代码
显示emp表中的总条数据
SELECT COUNT(*) FROM emp统计 emp 职位类型的个数。
SELECT COUNT(DISTINCT job) FROM emp;统计 emp 职位为 SALESMAN 的雇员个数
SELECT COUNT(*) FROM emp WHERE job='SALESMAN';统计 emp 中 有佣金的雇员的个数
SELECT COUNT(comm) FROM emp;
2.4、 MAX(求最大值)
2.4.1、 说明
ALL表示对所有的值求最大值 (默认)
DISTINCT表示对不同的值求最大值,相同的只取一次
2.4.2、 示例代码
查询所有雇员中最高的薪资
SELECT MAX(sal) FROM emp;显示所有工资不同的员工中工资最高的
SELECT MAX(DISTINCT SAL) FROM EMP;
2.5、 AVG(求平均值)
2.5.1、 说明
ALL表示对所有的值求平均值 ( 默认)
DISTINCT表示对不同的值求最大值,相同的只取一次
2.5.2、 示例代码
求所有员工工资的平均值
SELECT (sal) FROM emp;求不重复的员工工资的平均值
SELECT AVG(DISTINCT sal) FROM emp;
2.6、MIN(求最小值)
2.6.1、 说明
ALL表示对所有的值求最小值( 默认)
DISTINCT表示对不同的值求最小值,相同的只取一次
2.6.2、 示例代码
员工编号最小值
SELECT min(empno) FROM emp查询工资最低的SELECT MIN(sal) FROM emp查询年薪最低的
SELECT * ,MIN((NVL2(comm,comm+sal,comm)*12 ) FROM emp
2.7 、注意事项
分组函数只能出现在select列表、having、order by子句中(不能出现在where后面)
当使用分组函数时,除了函数count(*)外,其他分组函数都会忽略NULL行。
2.8、单行函数和聚合函数的区别
单行函数操作时,根据函数的功能同时处理一行数据,返回每一行的处理结果;
聚合函数同时对分组后的一组行进行操作,返回分组后各组的处理结果