聚合函数又称为分组函数,常用:
- COUNT() 计算表中的记录数(行数)。
- SUM() 计算表中数值列中数据的合计值。
- AVG() 计算表中数值列中的数据的平均值。
- MAX() 求出表中任意列中的数据的最大值。
- MIN() 求出表中任意列中数据的最小值。
SUM() 和 AVG() 参数类型为数值类型,MAX() 和 MIN() 参数类型可以是日期、数值、字符类型,COUNT() 适用任何类型。
聚合函数都会忽略 NULL 值。
# 查询公司员工工资的最大值、最小值、平均值、总和。
SELECT
AVG( salary ),
MAX( salary ),
MIN( salary ),
SUM( salary )
FROM
employees;
# 查询员工表中最早入职时间和最晚入职时间的差值。
SELECT
MAX( hiredate ),
MIN( hiredate ),
DATEDIFF(
MAX( hiredate ),
MIN( hiredate ))
FROM
employees;
可以和 DISTINCT 搭配使用,DISTINCT 必须写在括号中。这是因为在聚合之前先去除重复行。
SELECT
SUM( DISTINCT salary ),
SUM( salary )
FROM
employees;
SELECT
COUNT( DISTINCT salary ),
COUNT( salary )
FROM
employees;
可以使用 COUNT(*) 或者 COUNT(常量值) 可以统计整张表的行数。
SELECT
COUNT( department_id ),
COUNT(*),
COUNT( 1 )
FROM
employees;
效率:
MYISAM 存储引擎下,COUNT() 的效率高。
INNODB 存储引擎下,COUNT() 和 COUNT(常量值) 的效率差不多,比 COUNT(字段) 效率高。
和聚合函数一同查询的字段要求是 GROUP BY 的字段。