在 SQL 中,聚合函数 是用来对一组数据进行计算并返回单个结果的函数,它通常和 GROUP BY 子句配合使用(也可单独用于整张表)。下面我会由浅入深地介绍常用的聚合函数,并用简单示例帮助你理解。
一、常用聚合函数及用法
1. 基础统计类
表格
| 函数 | 作用 | 示例(基于 students 表,含 score 字段) |
|---|---|---|
COUNT() |
统计行数(非 NULL 值的数量) | SELECT COUNT(*) FROM students;(统计总人数)SELECT COUNT(score) FROM students;(统计有成绩的人数) |
SUM() |
计算数值列的总和 | SELECT SUM(score) FROM students;(计算所有学生成绩总和) |
AVG() |
计算数值列的平均值 | SELECT AVG(score) FROM students;(计算平均成绩) |
MAX() |
找出列中的最大值 | SELECT MAX(score) FROM students;(找出最高分) |
MIN() |
找出列中的最小值 | SELECT MIN(score) FROM students;(找出最低分) |
2. 进阶聚合函数(部分数据库支持)
GROUP_CONCAT()(MySQL 特有):将分组后的字段值拼接成字符串示例:SELECT class, GROUP_CONCAT(name) FROM students GROUP BY class;(按班级拼接学生姓名)STDDEV()/STD():计算标准差(衡量数据离散程度)示例:SELECT STDDEV(score) FROM students;VARIANCE():计算方差(标准差的平方)示例:SELECT VARIANCE(score) FROM students;AVG(DISTINCT 列名):计算去重后的平均值(SUM/COUNT也支持DISTINCT)示例:SELECT AVG(DISTINCT score) FROM students;(去重后计算平均成绩)
二、核心使用规则
-
NULL 值处理 :所有聚合函数都会自动忽略
NULL值(除了COUNT(*),它会统计所有行,包括 NULL)。比如:若某学生score为 NULL,SUM(score)不会把它算成 0,而是直接跳过。 -
配合 GROUP BY :聚合函数常和
GROUP BY分组使用,实现 "按组统计"。示例:按班级统计平均分sql
SELECT class, AVG(score) AS avg_score FROM students GROUP BY class; -
过滤聚合结果 :用
HAVING而非WHERE过滤聚合后的结果(WHERE过滤原始数据)。示例:找出平均分大于 80 的班级sql
SELECT class, AVG(score) AS avg_score FROM students GROUP BY class HAVING avg_score > 80;
总结
- 核心聚合函数:
COUNT()(统计行数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值),是日常开发中最常用的。 - 聚合函数会忽略
NULL值,且分组统计需配合GROUP BY,过滤聚合结果用HAVING。 - 进阶函数(如
GROUP_CONCAT、STDDEV)需根据具体数据库(MySQL/Oracle/SQL Server)选择使用。