滚雪球学MySQL[3.2讲]:MySQL聚合函数与分组详解:COUNT、SUM、AVG、MAX、MIN及GROUP BY与HAVING

全文目录:

前言

在上一期的学习中,我们详细探讨了MySQL的多表查询(3.1),包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN)以及多表联合查询的技巧。通过这些知识,你已经能够在多个表之间进行数据关联和查询,为复杂的数据提取和分析打下了坚实的基础。

然而,随着数据量的增长,简单的查询往往无法满足我们的需求。在实际应用中,我们不仅需要从多个表中提取数据,还常常需要对这些数据进行统计分析。为了满足这些需求,MySQL提供了一系列强大的聚合函数 ,如COUNTSUMAVGMAXMIN等,用于对数据进行汇总、求和、取平均值和查找最大、最小值等操作。此外,结合GROUP BYHAVING语句,我们可以对数据进行分组,并对分组后的数据应用条件过滤。

本期内容将深入探讨MySQL中的聚合函数与分组操作(3.2),通过具体的示例帮助你全面掌握这些重要的SQL功能,提升你在数据统计和分析方面的技能。

在本期内容结束后,下一期我们将继续深入数据库的高级查询技巧,探讨如何进行复杂查询(3.3),进一步提升数据库的处理能力。

3.2 聚合函数与分组

1. COUNT、SUM、AVG、MAX、MIN等常用聚合函数

聚合函数是用于对一组值进行计算并返回单个值的函数,广泛用于数据分析中。MySQL支持多种聚合函数,下面我们将分别介绍最常用的五种。

1.1 COUNT函数

COUNT函数用于统计行数,通常用于计算满足特定条件的记录数。

基本语法
sql 复制代码
SELECT COUNT(列名) FROM 表名 WHERE 条件;
示例1:统计学生表中的总记录数

假设我们有一个名为students的表,包含学生的idnameage等信息。我们可以通过COUNT函数统计表中学生的总数:

sql 复制代码
SELECT COUNT(*) FROM students;

这将返回students表中的总记录数。

示例2:统计特定条件下的记录数

如果我们只想统计年龄大于20岁的学生数量,可以在WHERE条件中指定:

sql 复制代码
SELECT COUNT(*) FROM students WHERE age > 20;
1.2 SUM函数

SUM函数用于对一列数值进行求和操作,常用于计算总金额、总数等数据。

基本语法
sql 复制代码
SELECT SUM(列名) FROM 表名 WHERE 条件;
示例1:计算总成绩

假设我们有一个grades表,包含学生的成绩信息。我们可以通过SUM函数计算所有学生的总成绩:

sql 复制代码
SELECT SUM(score) FROM grades;
1.3 AVG函数

AVG函数用于计算某列数值的平均值,常用于统计平均成绩、平均工资等数据。

基本语法
sql 复制代码
SELECT AVG(列名) FROM 表名 WHERE 条件;
示例1:计算学生的平均成绩

我们可以使用AVG函数来计算所有学生的平均成绩:

sql 复制代码
SELECT AVG(score) FROM grades;
1.4 MAX函数

MAX函数用于查找某列的最大值,常用于获取最高分、最高工资等信息。

基本语法
sql 复制代码
SELECT MAX(列名) FROM 表名 WHERE 条件;
示例1:查询最高分

如果我们想查找最高的学生成绩,可以使用MAX函数:

sql 复制代码
SELECT MAX(score) FROM grades;
1.5 MIN函数

MIN函数用于查找某列的最小值,常用于获取最低分、最低工资等信息。

基本语法
sql 复制代码
SELECT MIN(列名) FROM 表名 WHERE 条件;
示例1:查询最低分

同样,我们可以使用MIN函数查找最低的学生成绩:

sql 复制代码
SELECT MIN(score) FROM grades;

2. GROUP BY 与 HAVING 分组与筛选

在实际工作中,除了对所有数据进行汇总分析外,我们经常需要对数据进行分组,然后对每个分组进行聚合计算。这时就需要用到GROUP BY语句。

2.1 GROUP BY 语句

GROUP BY用于将查询结果按照一个或多个列进行分组,并对每个分组进行聚合计算。它通常与聚合函数一起使用。

基本语法
sql 复制代码
SELECT 列1, 聚合函数(列2) FROM 表名 WHERE 条件 GROUP BY 列1;
示例1:按专业统计学生人数

假设我们有一个学生表,包含学生的专业信息。现在我们希望统计每个专业的学生人数:

sql 复制代码
SELECT major, COUNT(*) AS student_count 
FROM students 
GROUP BY major;

此查询将根据major列对学生进行分组,并统计每个专业的学生人数。

示例2:按专业计算平均成绩

假设我们有一个包含学生成绩的表,我们希望计算每个专业的平均成绩。可以使用以下查询:

sql 复制代码
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是用于过滤聚合结果的。

基本语法
sql 复制代码
SELECT 列1, 聚合函数(列2) FROM 表名 WHERE 条件 GROUP BY 列1 HAVING 聚合函数(列2) 条件;
示例1:筛选出学生人数大于5的专业

假设我们希望只显示学生人数超过5人的专业:

sql 复制代码
SELECT major, COUNT(*) AS student_count 
FROM students 
GROUP BY major 
HAVING COUNT(*) > 5;

此查询会筛选出学生人数大于5的专业。

示例2:筛选出平均成绩高于80的专业

如果我们想要筛选出平均成绩大于80分的专业,可以使用HAVING语句:

sql 复制代码
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 多字段分组

除了按单个字段分组外,我们还可以按多个字段分组。例如,统计每个年级中不同专业的学生人数:

sql 复制代码
SELECT grade, major, COUNT(*) AS student_count 
FROM students 
GROUP BY grade, major;
3.2 使用CASE与聚合函数

我们可以结合CASE语句与聚合函数进行条件汇总。例如,统计男生和女生的人数:

sql 复制代码
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中的聚合函数与分组操作 ,并了解了如何使用COUNTSUMAVGMAXMIN等函数进行数据汇总分析,以及如何结合GROUP BYHAVING语句对数据进行分组与筛选。这些知识是数据库分析的核心技能,尤其适用于统计、数据挖掘等场景。

在下期内容中,我们将进一步探讨复杂查询(3.3),包括子查询、联合查询和嵌套查询等技术,帮助你在更复杂的场景中处理数据。敬请期待!

相关推荐
纯纯沙口2 分钟前
Qt—用SQLite实现简单的注册登录界面
数据库·sqlite
初次见面我叫泰隆15 分钟前
MySQL——3、数据类型
数据库·mysql
一叶屋檐37 分钟前
Neo4j 图书馆借阅系统知识图谱设计
服务器·数据库·cypher
好吃的肘子2 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
weixin_472339462 小时前
MySQL MCP 使用案例
数据库·mysql
lqlj22333 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔3 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务4 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
fengye2071614 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
拓端研究室TRL4 小时前
Python与MySQL网站排名数据分析及多层感知机MLP、机器学习优化策略和地理可视化应用|附AI智能体数据代码
人工智能·python·mysql·机器学习·数据分析