Mysql进阶四:常见函数-分组函数
分组函数:常用于统计
1.内容:sum max min count avg
2.特点:
- sum avg 用于处理数值型
max min 用于处理任何数据类型
count 适用处理任何数据类型,用于计算非空数据的类型
2.分组函数是否忽略null值 以上分组函数全部都都忽略null值
3.可以和distinct去重搭配使用
4.count的使用:广泛用于计算非空行数(当且仅当一行所有数据都为null时,才不会计入行数)
5.和分组函数搭配使用字段要求是group by后的字段
1. 简单使用
USE myemployees;
SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT COUNT(salary) FROM employees;
SELECT SUM(salary) 和,AVG(salary) 平均
FROM employees;
2.参数支持的类型
SUM() AVG() 支持数值型数据
- 字符串使用无意义
(sqlyog虽然输出为0,但是并不代表正确,事实上数据库并不建议我们这样使用)
验证:
SELECT SUM(last_name),AVG(last_name)
FROM employees;
- 日期使用无意义
验证:
SELECT SUM(hiredate),AVG(hiredate)
FROM employees;
- MAX() MIN()支持字符型、日期
SELECT MAX(last_name),MIN(last_name)
FROM employees;
SELECT MAX(hiredate),MAX(hiredate)
FROM employees;
3.忽略NULL
SELECT commission_pct
FROM employees;
输出为107行数据
SELECT SUM(commission_pct),AVG(commission_pct)
FROM employees;
输出为 7.80 0.222857
4.和DISTINCT搭配使用
SELECT SUM(DISTINCT salary), SUM(salary)
FROM employees;
SELECT COUNT(salary),COUNT(DISTINCT salary)
FROM employees;
5.count的使用
SELECT COUNT(salary)
FROM employees;
用于计算行数
SELECT COUNT(*)
FROM employees;
SELECT COUNT(1)
FROM employees;
效率分析:
- MYISAM 存储引擎中,COUNT(*) 效率最高
- INNODB 存储引擎下,COUNT(*) 和COUNT(1)效率差不多,比COUNT(字段) 要高一点
6.和分组函数一同使用查询的字段有限制
下面这种写法有误(不规范结果),因为AVG结果是一个,而employee_id则是107个
SELECT AVG(salary) ,employee_id
FROM employees;
测试题:
1.查询公司员工工资最大值、最小值、平均值、总和
2.查询员工表中的最大入职时间和最小入职时间相差的总天数(起别名为:天差)
3.查询部门编号为90的员工个数
答案:
SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary)
FROM employees;
SELECT DATEDIFF (MAX(hiredate),MIN(hiredate)) 天差
FROM employees;
SELECT COUNT(*)
FROM employees;
WHERE employee_id = 90
第三小题:注意格式,是where在from后面,我第一遍写的时候就弄错了。