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

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

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

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

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

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

 MySQL数据库操作篇3(聚合函数&分组查询)_第1张图片

目录

聚合函数

分组查询 


 

聚合函数

1.count() 统计数目函数

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

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

MySQL数据库操作篇3(聚合函数&分组查询)_第2张图片

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

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

select count(distinct name) from student; 

2.sum()

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

 MySQL数据库操作篇3(聚合函数&分组查询)_第3张图片

 3.avg()

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

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

MySQL数据库操作篇3(聚合函数&分组查询)_第4张图片 

 4.max() , min()

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

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

MySQL数据库操作篇3(聚合函数&分组查询)_第5张图片

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

分组查询 

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

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

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

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

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

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

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

MySQL数据库操作篇3(聚合函数&分组查询)_第6张图片

对照查询结果可以看出,总共有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;

你可能感兴趣的:(数据库,mysql)