MySQL聚合函数的使用介绍
MySQL聚合函数是用于对一组值进行计算并返回单个值的函数,通常在数据处理、统计分析场景中发挥重要作用。它们常与GROUP BY子句配合使用,对分组后的数据执行统计运算,帮助我们快速获取数据的汇总信息。
常用聚合函数分类
MySQL提供了多种聚合函数,覆盖不同的统计需求,以下是常用的几类:
统计类:
COUNT()、SUM()、AVG()极值类:
MAX()、MIN()去重统计类:
COUNT(DISTINCT)
各聚合函数详解与示例
1. COUNT() 函数
COUNT()用于统计符合条件的行数,支持三种常见用法:
COUNT(*):统计所有行,包括包含NULL值的行COUNT(列名):统计指定列中非NULL值的行数COUNT(DISTINCT 列名):统计指定列中去重后的非NULL值数量
假设我们有如下student表:
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
score DECIMAL(5,2),
class VARCHAR(10)
);
INSERT INTO student (name, score, class) VALUES
('张三', 85.5, '一班'),
('李四', 92.0, '一班'),
('王五', NULL, '二班'),
('赵六', 88.5, '二班'),
('孙七', 92.0, '一班');统计所有学生数量:
SELECT COUNT(*) AS total_student FROM student; -- 结果:5
统计有成绩的学生数量:
SELECT COUNT(score) AS has_score_student FROM student; -- 结果:4(王五的成绩为NULL,不计入)
统计去重后的成绩数量:
SELECT COUNT(DISTINCT score) AS distinct_score FROM student; -- 结果:3(85.5、92.0、88.5三个不同成绩)
2. SUM() 函数
SUM()用于计算指定列的数值总和,仅对非NULL值生效,如果列所有值都为NULL,返回NULL。
计算所有学生的总成绩:
SELECT SUM(score) AS total_score FROM student; -- 结果:85.5 + 92.0 + 88.5 + 92.0 = 358.0
结合GROUP BY计算每个班级的总成绩:
SELECT class, SUM(score) AS class_total_score FROM student GROUP BY class; -- 一班结果:85.5 + 92.0 + 92.0 = 269.5 -- 二班结果:88.5
3. AVG() 函数
AVG()用于计算指定列的数值平均值,仅对非NULL值生效,计算方式为总和除以非NULL值的数量。
计算所有学生的平均成绩:
SELECT AVG(score) AS avg_score FROM student; -- 结果:358.0 / 4 = 89.5
计算每个班级的平均成绩:
SELECT class, AVG(score) AS class_avg_score FROM student GROUP BY class; -- 一班结果:269.5 / 3 ≈ 89.83 -- 二班结果:88.5 / 1 = 88.5
4. MAX() 和 MIN() 函数
MAX()返回指定列的最大值,MIN()返回指定列的最小值,同样忽略NULL值。
查询所有学生中的最高分和最低分:
SELECT MAX(score) AS max_score, MIN(score) AS min_score FROM student; -- max_score结果:92.0,min_score结果:85.5
查询每个班级的最高分:
SELECT class, MAX(score) AS class_max_score FROM student GROUP BY class; -- 一班结果:92.0,二班结果:88.5
使用注意事项
聚合函数默认会忽略NULL值,仅在
COUNT(*)的场景下会统计包含NULL的行。如果
SELECT语句中同时包含普通列和聚合函数,普通列必须出现在GROUP BY子句中,否则查询结果可能不符合预期。聚合函数不能直接用在
WHERE子句中,如果需要筛选聚合后的结果,需要使用HAVING子句。
例如,查询平均成绩大于90的班级:
SELECT class, AVG(score) AS class_avg_score FROM student GROUP BY class HAVING class_avg_score > 90; -- 结果:一班,平均约89.83不满足,无返回结果;如果调整数据后满足条件才会返回对应班级
总结
MySQL聚合函数是数据统计分析的核心工具,熟练掌握COUNT()、SUM()、AVG()、MAX()、MIN()等函数的用法,结合GROUP BY和HAVING子句,可以高效完成各类数据汇总需求,大幅提升数据处理效率。