前面几篇文章介绍了MySQL常见函数的第一大类——单行函数(包括字符函数,数学函数,日期函数,流程控制函数以及其他函数)
这一章来介绍MySQL常见函数第二大类——分组函数
二、分组函数
1. 功能:
功能:用作统计使用,又称为聚合函数或统计函数或组函数
#五个常用的分组函数
1》sum 求和
返回指定列的所有值之和
#查询订单的总数量和订单的总价
2》max 最大值
返回指定列的最大值
#查询订单中数量最多的值
3》min 最小值
返回指定列的最小值
#查询订单中价格最低的值
4》avg 平均值
返回指定列的平均值
#查询订单数量的平均值和订单价格的平均值
5》count 计算个数
返回指定列中非NULL值的个数
#查询订单的总行数
2. 特点:
A. 以上五个分组函数都忽略null值,除了count( * )(不会忽略列值为NULL的行数)
B. 参数支持哪些类型:
sum和avg一般用于处理数值型
max、min、count可以处理任何数据类型
C. 都可以和distinct搭配使用,用于统计去重后的结果(一般sum和avg比较常用)
D. count 函数的详细介绍
count(*) 表示所有的列,相当于行数,在统计结果的时候,不会忽略列值为null,因此,常用来统计总行数
#查询员工表的总行数
也可以写成:
因为:参数可以支持: * 、字段、常量值,一般放1
注:
- count(字段)忽略字段为null的情况,不计算null值(即不统计字段为null的记录)
- count(null)结果恒为0
补充:
从执行计划来看:
count(1)和count( * )的效果是一样的,
但从效率来看:
MYISAM存储引擎下,count( * )的效率高
INNODB存储引擎下,count( * )和count(1)的效率差不多,比count(字段)要高一些(因为需要判断是否为null,即需要筛选)
因此建议使用count( * )
注:
- 列名为主键,count(列名)会比count(1)快 ;
- 列名不为主键,count(1)会比count(列名)快 ;
- 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count( * ) ;
- 如果有主键,则 select count(主键)的执行效率是最优的 ;
- 如果表只有一个字段,则 select count( * )最优。