1. 概念
分组函数用于统计使用,所以又称为聚合函数或统计函数,亦或组函数。
2. 分类
sum: 求和
avg: 平均值
max: 最大值
min: 最小值
count:计算个数(计算非空值个数)
3. 特点
- sum、avg一般用于处理数值型,max、min、count可以处理任意类型;
- sum、avg、max、min、count均忽略null;
- 可以和distinct搭配实现去重;
#去重---SUM
SELECT SUM(DISTINCT salary),SUM(salary) FROM JDSC;
#去重---COUNT
SELECT COUNT(DISTINCT salary) FROM JDSC;
4. sum
#求工资(salary)之和 表名:JDSC
SELECT SUM(salary) FROM JDSC;
5. avg
#求工资(salary)平均值 表名:JDSC
SELECT AVG(salary) FROM JDSC;
6. max
#求工资(salary)最大值 表名:JDSC
SELECT MAX(salary) FROM JDSC;
7. min
#求工资(salary)最小值 表名:JDSC
SELECT MIN(salary) FROM JDSC;
8. count
#求工资(salary)个数 表名:JDSC
SELECT COUNT(salary) FROM JDSC;
9. 组合使用
SELECT
SUM(salary) 和,
AVG(salary) 平均,
MAX(salary) 最高
FROM
JDSC;
10. count扩展
#统计行数
SELECT COUNT(*) FROM JDSC;
#统计行数
SELECT COUNT(1) FROM JDSC;
效率:
MYISAM存储引擎下,COUNT(*)的效率高;
INNODB存储引擎下,COUNT(*)和COUNT(1)效率差不多,比COUNT(字段)高一些,原因是COUNT(字段)有判断是否为null。
11. 和分组函数一同查询的字段有限制
和分组函数一同查询的字段要求是group by后的字段。
12. 练习
#查询员工表中最大入职时间(hiredate)和最小入职时间的相差天数,别名为相差天数
SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) 相差天数 FROM JDSC;
#查询部门编号(ID)为90的员工个数
SELECT
COUNT(*) 个数
FROM
JDSC
WHERE
ID = 90;