当前位置: 首页 > article >正文

滚雪球学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提供了一系列强大的聚合函数,如COUNTSUMAVGMAXMIN等,用于对数据进行汇总、求和、取平均值和查找最大、最小值等操作。此外,结合GROUP BYHAVING语句,我们可以对数据进行分组,并对分组后的数据应用条件过滤。

本期内容将深入探讨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的表,包含学生的idnameage等信息。我们可以通过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用于将查询结果按照一个或多个列进行分组,并对每个分组进行聚合计算。它通常与聚合函数一起使用。

基本语法
SELECT1, 聚合函数(2) FROM 表名 WHERE 条件 GROUP BY1;
示例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是用于过滤聚合结果的。

基本语法
SELECT1, 聚合函数(2) FROM 表名 WHERE 条件 GROUP BY1 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中的聚合函数与分组操作,并了解了如何使用COUNTSUMAVGMAXMIN等函数进行数据汇总分析,以及如何结合GROUP BYHAVING语句对数据进行分组与筛选。这些知识是数据库分析的核心技能,尤其适用于统计、数据挖掘等场景。

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


http://www.kler.cn/news/329050.html

相关文章:

  • Qt 每日面试题 -5
  • 手机实时提取SIM卡打电话的信令声音-新的篇章(二、USB音频线初步探索)
  • XML与JSON的用法与区别
  • IP数据云—IP定位可以精准到什么程度?
  • 深度学习:(八)深层神经网络参数与流程
  • Win10系统插入带有麦克风的耳机_麦克风不起作用_解决方法_亲测成功---Windows运维工作笔记054
  • 面试题1-fail-safe机制与fail-fast 机制
  • 以太网开发基础-MAC和PHY
  • js设计模式(26)
  • GeoShp:shapefile转geojson支持nodejs和浏览器
  • 消息队列(MQ)深度探索:架构精髓、卓越优势与广泛应用
  • UE5 项目缓存文件删除、版本控制说明(工程目录结构)
  • 解决DHCP服务异常导致设备无法获取IP地址的方法
  • Thinkphp/Laravel基于vue的少数民族民歌网络图书馆管理系统
  • STM32低功耗实验学习日记
  • GO语言环境搭建和字符说明
  • 【Linux系统编程】第二十六弹---彻底掌握文件I/O:C/C++文件接口与Linux系统调用实践
  • 中国身份证号码校验
  • python和r语言的区别是什么
  • alpine安装docker踩坑记
  • git初级使用学习(图文)
  • uniapp微信小程序使用ucharts遮挡自定义tabbar的最佳解决方案
  • Windows 11 的 24H2 更新將帶來全新 Copilot+ AI PC 功能
  • linux文本三剑客
  • 【SQLite】sqlite | insert插入存在即更新
  • 828华为云征文 | 华为云X实例CPU性能测试详解与优化策略
  • Android Studio :The emulator process for AVD was killed。
  • 微服务--SpringAMQP
  • YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU
  • 【嵌入式linux】GPIO子系统 | 用户空间交互