滚雪球学MySQL[3.2讲]:MySQL聚合函数与分组详解:COUNT、SUM、AVG、MAX、MIN及GROUP BY与HAVING
全文目录:
- 前言
- 3.2 聚合函数与分组
- 1. COUNT、SUM、AVG、MAX、MIN等常用聚合函数
- 1.1 COUNT函数
- 基本语法
- 示例1:统计学生表中的总记录数
- 示例2:统计特定条件下的记录数
- 1.2 SUM函数
- 基本语法
- 示例1:计算总成绩
- 1.3 AVG函数
- 基本语法
- 示例1:计算学生的平均成绩
- 1.4 MAX函数
- 基本语法
- 示例1:查询最高分
- 1.5 MIN函数
- 基本语法
- 示例1:查询最低分
- 2. GROUP BY 与 HAVING 分组与筛选
- 2.1 GROUP BY 语句
- 基本语法
- 示例1:按专业统计学生人数
- 示例2:按专业计算平均成绩
- 2.2 HAVING 语句
- 基本语法
- 示例1:筛选出学生人数大于5的专业
- 示例2:筛选出平均成绩高于80的专业
- 3. 聚合函数与分组的高级应用
- 3.1 多字段分组
- 3.2 使用CASE与聚合函数
- 结语与下期预告
前言
在上一期的学习中,我们详细探讨了MySQL的多表查询(3.1),包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN)以及多表联合查询的技巧。通过这些知识,你已经能够在多个表之间进行数据关联和查询,为复杂的数据提取和分析打下了坚实的基础。
然而,随着数据量的增长,简单的查询往往无法满足我们的需求。在实际应用中,我们不仅需要从多个表中提取数据,还常常需要对这些数据进行统计分析。为了满足这些需求,MySQL提供了一系列强大的聚合函数,如COUNT
、SUM
、AVG
、MAX
、MIN
等,用于对数据进行汇总、求和、取平均值和查找最大、最小值等操作。此外,结合GROUP BY
和HAVING
语句,我们可以对数据进行分组,并对分组后的数据应用条件过滤。
本期内容将深入探讨MySQL中的聚合函数与分组操作(3.2),通过具体的示例帮助你全面掌握这些重要的SQL功能,提升你在数据统计和分析方面的技能。
在本期内容结束后,下一期我们将继续深入数据库的高级查询技巧,探讨如何进行复杂查询(3.3),进一步提升数据库的处理能力。
3.2 聚合函数与分组
1. COUNT、SUM、AVG、MAX、MIN等常用聚合函数
聚合函数是用于对一组值进行计算并返回单个值的函数,广泛用于数据分析中。MySQL支持多种聚合函数,下面我们将分别介绍最常用的五种。
1.1 COUNT函数
COUNT函数用于统计行数,通常用于计算满足特定条件的记录数。
基本语法
SELECT COUNT(列名) FROM 表名 WHERE 条件;
示例1:统计学生表中的总记录数
假设我们有一个名为students
的表,包含学生的id
、name
、age
等信息。我们可以通过COUNT
函数统计表中学生的总数:
SELECT COUNT(*) FROM students;
这将返回students
表中的总记录数。
示例2:统计特定条件下的记录数
如果我们只想统计年龄大于20岁的学生数量,可以在WHERE
条件中指定:
SELECT COUNT(*) FROM students WHERE age > 20;
1.2 SUM函数
SUM函数用于对一列数值进行求和操作,常用于计算总金额、总数等数据。
基本语法
SELECT SUM(列名) FROM 表名 WHERE 条件;
示例1:计算总成绩
假设我们有一个grades
表,包含学生的成绩信息。我们可以通过SUM
函数计算所有学生的总成绩:
SELECT SUM(score) FROM grades;
1.3 AVG函数
AVG函数用于计算某列数值的平均值,常用于统计平均成绩、平均工资等数据。
基本语法
SELECT AVG(列名) FROM 表名 WHERE 条件;
示例1:计算学生的平均成绩
我们可以使用AVG
函数来计算所有学生的平均成绩:
SELECT AVG(score) FROM grades;
1.4 MAX函数
MAX函数用于查找某列的最大值,常用于获取最高分、最高工资等信息。
基本语法
SELECT MAX(列名) FROM 表名 WHERE 条件;
示例1:查询最高分
如果我们想查找最高的学生成绩,可以使用MAX
函数:
SELECT MAX(score) FROM grades;
1.5 MIN函数
MIN函数用于查找某列的最小值,常用于获取最低分、最低工资等信息。
基本语法
SELECT MIN(列名) FROM 表名 WHERE 条件;
示例1:查询最低分
同样,我们可以使用MIN
函数查找最低的学生成绩:
SELECT MIN(score) FROM grades;
2. GROUP BY 与 HAVING 分组与筛选
在实际工作中,除了对所有数据进行汇总分析外,我们经常需要对数据进行分组,然后对每个分组进行聚合计算。这时就需要用到GROUP BY
语句。
2.1 GROUP BY 语句
GROUP BY
用于将查询结果按照一个或多个列进行分组,并对每个分组进行聚合计算。它通常与聚合函数一起使用。
基本语法
SELECT 列1, 聚合函数(列2) FROM 表名 WHERE 条件 GROUP BY 列1;
示例1:按专业统计学生人数
假设我们有一个学生表,包含学生的专业信息。现在我们希望统计每个专业的学生人数:
SELECT major, COUNT(*) AS student_count
FROM students
GROUP BY major;
此查询将根据major
列对学生进行分组,并统计每个专业的学生人数。
示例2:按专业计算平均成绩
假设我们有一个包含学生成绩的表,我们希望计算每个专业的平均成绩。可以使用以下查询:
SELECT major, AVG(score) AS average_score
FROM students
JOIN grades ON students.id = grades.student_id
GROUP BY major;
此查询会返回每个专业的平均成绩。
2.2 HAVING 语句
HAVING
用于对分组后的数据进行过滤。与WHERE
不同,HAVING
是用于过滤聚合结果的。
基本语法
SELECT 列1, 聚合函数(列2) FROM 表名 WHERE 条件 GROUP BY 列1 HAVING 聚合函数(列2) 条件;
示例1:筛选出学生人数大于5的专业
假设我们希望只显示学生人数超过5人的专业:
SELECT major, COUNT(*) AS student_count
FROM students
GROUP BY major
HAVING COUNT(*) > 5;
此查询会筛选出学生人数大于5的专业。
示例2:筛选出平均成绩高于80的专业
如果我们想要筛选出平均成绩大于80分的专业,可以使用HAVING
语句:
SELECT major, AVG(score) AS average_score
FROM students
JOIN grades ON students.id = grades.student_id
GROUP BY major
HAVING AVG(score) > 80;
3. 聚合函数与分组的高级应用
聚合函数和分组操作是数据库分析的核心功能,特别是在大数据分析中,常常用于生成报表和分析数据趋势。以下是几个常见的高级应用场景。
3.1 多字段分组
除了按单个字段分组外,我们还可以按多个字段分组。例如,统计每个年级中不同专业的学生人数:
SELECT grade, major, COUNT(*) AS student_count
FROM students
GROUP BY grade, major;
3.2 使用CASE与聚合函数
我们可以结合CASE
语句与聚合函数进行条件汇总。例如,统计男生和女生的人数:
SELECT
SUM(CASE WHEN gender = 'Male' THEN 1 ELSE 0 END) AS male_count,
SUM(CASE WHEN gender = 'Female' THEN 1 ELSE 0 END) AS female_count
FROM students;
这种技术在需要根据特定条件进行分类统计时非常有用。
结语与下期预告
通过本期的学习,你已经掌握了MySQL中的聚合函数与分组操作,并了解了如何使用COUNT
、SUM
、AVG
、MAX
、MIN
等函数进行数据汇总分析,以及如何结合GROUP BY
和HAVING
语句对数据进行分组与筛选。这些知识是数据库分析的核心技能,尤其适用于统计、数据挖掘等场景。
在下期内容中,我们将进一步探讨复杂查询(3.3),包括子查询、联合查询和嵌套查询等技术,帮助你在更复杂的场景中处理数据。敬请期待!