MySQL数据库操作篇3(聚合函数&分组查询)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL数据库操作篇3(聚合函数&分组查询)

通过MySQL提供的聚合函数,可以很方便的进行一些计算来辅助查询,所谓聚合函数就是将表中的数据统计后进行的某种处理

分组查询可以理解成将一张表按照某个属性分成多张表,属性值相同的在一张表里

比如说学生表,按照性别这个属性分组,就能分成两个表,一个男生表,一个女生表、

接下里详细了解一下有哪些聚合函数以及分组查询的具体使用

本文章用到三张表来做演示,一张学生表,一张课程表,还有一张学习表,具体定义如下图


聚合函数

1.count() 统计数目函数

这个函数用来返回查询到的数据的数量,通过用来统计有多少个数据

例如查询学生表中有多少个学生

count不会计入NULL值,如果想在统计数目是去掉重复的,可以使用distinct

例如统计名字不重复的同学的数目

select count(distinct name) from student;

2.sum()

该函数用来查询某一列的所有属性值的和,不是数字没有意义
比如查一张学习表中所有分数的总和

3.avg()

这个函数是求某个属性列的平均值,同样,如果属性列的值不是数字的话,那么就没有意义

接下来演示一下,一张学习表中,求所有成绩的平均值

4.max() , min()

查询某个属性列中最大值和最小值,同样,如果属性列中的值不是数字,那么查询结果没有意义

接下来查询成绩表中成绩最高的和成绩最低的

上面的这些聚合函数都可以加上distinct进行去重处理后再得出结果


分组查询

分组查询需要使用语句group by

这个语句可以按照指定的列进行分组,列中相同的值被分为一组,我们理解成每一组都是一张新的表,这样方便我们对后续操作的理解

什么情况下会用到分组呢?看下面这个问题

显示每一门课程的最高分数

这个问题,我们首先需要统计某一门课程总共有多少个人选,然后再统计选这门课程的最高成绩,显示出来即可,课程号以及成绩都在学习表中,如果能把相同的课程单独拎出来放在一起,那么问题就好解决了,而分组查询就是进行这样的操作

首先,我们在学习表中将课程号进行一个分组,课程号相同的放在一起,然后再统计课程号相同的同学中成绩最高的那一个,具体操作如下

select cou_id, max(grade) as max_grade from study group by cou_id;

对照查询结果可以看出,总共有4门课程,每一门的课程的最大值都显示出来了

接下来,我们将难度加大一点,查询平均分不低于80分的课程

这个问题要求我们将每门课程先求平均分,然后再进行一个筛选,如果大于80就显示

那么我们如何将分组后并求出平均值的课程再进行一个筛选呢?

这就要用到另一个语句having,having有点类似于where,都是进行条件筛选,不过having是分组进行数据的筛选,解决上面问题的语句如下

select cou_id, avg(grade) as avg_value from study group by cou_id having avg_value >= 80;


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
196 66
|
13天前
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
48 8
|
16天前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
57 11
|
19天前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
74 6
|
29天前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
29 6
|
2月前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
68 9
|
27天前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
31 0
|
2月前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
128 3
|
2月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
41 2
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例