22、聚合函数AVG、COUNT、SUM、MIN、MAX

实际业务中诸如 总数、平均值、总和 这样的数据是没有存储在数据表中,如需要获取这些数据时,使用 MySQL 的聚合函数可以获取它们,MySQL 主要的聚合函数有 AVG、COUNT、SUM、MIN、MAX

AVG函数求平均值

以 teacher 表为例,先查所有 teacher 信息:

SELECT * FROM teacher;

可以使用 AVG() 函数求出全部教师平均年龄:

SELECT AVG(age) FROM teacher;

COUNT函数统计总条数

以 student 表为例,先查看所有 student 信息:

SELECT * FROM student;

可以使用 COUNT() 函数统计全部学生数量:

SELECT COUNT(*) FROM student;

也可以对某一列使用 COUNT() 函数:

SELECT COUNT(id) FROM student;

意 COUNT() 函数也会对 NULL 值的数据进行统计。

SUM函数统计总和

以 teacher 表为例,获取所有教师年龄总和:

SELECT SUM(age) FROM teacher;

MIN函数取最小值

以 teacher 表为例,先查所有 teacher 信息:

SELECT * FROM teacher;

可以使用 MIN() 函数对结果集取年龄最小值的数据:

SELECT MIN(age) FROM teacher;

MAX函数取最大值

以 student 表为例,先查看所有 student 信息:

SELECT * FROM student;

可以使用 MAX() 函数对结果集取年龄最大值的数据:

SELECT MAX(age) FROM student;

GROUP BY HAVING分组筛选

以 student_course、course、student 表内连接查询为例:

SELECT * 
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN course c 
ON a.course_id=c.id;

使用 AVG 函数取分组数据平均年龄:

SELECT a.course_id,c.course_name,AVG(age) 
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN course c 
ON a.course_id=c.id
GROUP BY a.course_id,c.course_name;

可以使用 HAVING 对上述结果筛选,例如选出选课学生平均年龄大于 20 的课程数据:

SELECT a.course_id,c.course_name,AVG(age) 
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN course c 
ON a.course_id=c.id
GROUP BY a.course_id,c.course_name
HAVING AVG(age) >= 20;

演示的是使用 AVG() 函数对分组数据进行筛选,同理,可以分别使用 COUNT()、MIN()、MAX()、SUM() 这四种聚合函数取出分组的数据,并且都可以使用 HAVING 后面的条件对分组聚合函数的值进行筛选。

为聚合的字段重命名

需要注意的是聚合函数产生的数据列最好重命名,这是因为后端程序语言在处理这些数据时需要规范的字段名,例如下面将字段重命名为teacher_avg_age:

SELECT AVG(age) AS teacher_avg_age FROM teacher;

参考资料: http://www.imooc.com/wiki/mysqllesson/minmax.html

posted @ 2022-07-05 22:13  tiansz  阅读(263)  评论(0编辑  收藏  举报