MySQL 中的聚合函数用于对一组值进行计算并返回单个结果,比如求和、计数、平均值等。它们通常配合
GROUP BY子句使用,也可以单独用于整张表的统计。
常用聚合函数及基本用法
以下是 MySQL 最常用的几个聚合函数及其典型场景:
COUNT():统计行数。可统计所有行(COUNT(*)),也可统计某列非 NULL 值的数量(
COUNT(列名))。 SUM():计算数值列的总和,忽略 NULL 值。 AVG():计算数值列的平均值,自动跳过 NULL。 MAX() / MIN():分别返回列中的最大值和最小值,支持数值、日期、字符串类型。
GROUP BY 与聚合函数配合使用
当需要按类别分组统计时,必须用
GROUP BY指定分组依据,否则会报错(SQL mode 严格模式下)。
例如:查询每个部门的员工人数和平均薪资:
SELECT dept_id, COUNT(*) AS emp_count, AVG(salary) AS avg_salary FROM employees GROUP BY dept_id;
注意:
SELECT中所有非聚合字段都必须出现在
GROUP BY中,否则语句非法。
HAVING 过滤分组结果
WHERE在分组前过滤行,
HAVING则在分组后对聚合结果进行条件筛选。
例如:只显示员工数超过 5 人的部门:
SELECT dept_id, COUNT(*) AS emp_count FROM employees GROUP BY dept_id HAVING COUNT(*) > 5;
不能把
> 5写在
WHERE后,因为
COUNT(*)是分组后的结果,WHERE 看不到它。
聚合函数的注意事项
使用时需留意以下细节:
所有聚合函数自动忽略NULL值(
COUNT(*)除外,它统计所有行)。 对字符串列使用
MAX()/MIN()会按字典序比较,不是按长度。
AVG()和
SUM()要求列是数值类型,否则可能隐式转换或报错。 聚合函数不能嵌套,如
COUNT(MAX(id))是非法的。
