mysql/mariadb知识点总结(15):select语句总结之二:分组与聚合

  • A+
所属分类:mysql  数据库

mysql/mariadb知识点总结(15):select语句总结之二:分组与聚合

前文总结了select语句的基本用法,这篇文章总结一下mysql中select语句的分组与聚合。

 

在本博客中,"mysql"是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表。

mysql文章列表直达链接:mysql知识点总结

 

我们先聊聊select语句中group by 的使用,见名知义,group by就是用来分组的。

而我们之所以要对数据进行分组,往往是为了在分组以后,对分组后的数据进行聚合操作。我们先从简单的操作开始总结。

 

首先查看一下student表中的数据。

mysql/mariadb知识点总结(15):select语句总结之二:分组与聚合

students表中的数据如上图所示。

 
 

现在,我们使用students表中的数据,进行分组,我们可以根据性别分组,也可以根据年龄分组。

比如,我们根据性别对上述数据进行分组,示例如下。

mysql/mariadb知识点总结(15):select语句总结之二:分组与聚合

可以看到,根据性别分组后,只分出了两组,因为性别只有男和女两种性别,所以只分出了两组。

而且每组只显示一条数据,也就是每组的第一条数据,注意,这可能与我们想象的不太一样,分组后每组只显示一条数据。

 

我们说过,分组的目的往往是对分组后的数据进行"聚合操作",设么意思呢?我们先看示例,看完示例再解释,示例如下

mysql/mariadb知识点总结(15):select语句总结之二:分组与聚合

上例中,我们通过性别对数据进行了分组,然后算出了每组中的人员数量,也就是说,我们算出了女性有10人,男性有15人。

而上例中的count(stuid)就是一种"聚合操作",count()是一种聚合函数,这个聚合函数能够算出对应数据的条目数量。

上例中的count(stuid)表示算出分组后的每组的stuid的数量,这就是所谓的"分组的目的往往是为了聚合操作"的含义。

 

那么,我们再举一个列子,比如,我们仍然按照性别分组,然后,算出男生与女生的平均年龄,可以使用如下语句。

mysql/mariadb知识点总结(15):select语句总结之二:分组与聚合

可以看到,根据性别分组,然后算出每组的平均年龄,男性平均年龄33(普遍成熟稳重),女性平均年龄19(花姑娘大大滴)

聪明如你一定猜到了,avg( )也是一种聚合函数,avg(age)就是求年龄的平均值。

 

那么,mysql中常用的聚合函数有哪些呢,如下?

min(col)返回指定列的最小值

max(col)返回指定列的最大值

avg(col)返回指定咧的平均值

count(col)返回指定列中非null值的个数

sum(col)返回指定列的所有值之和

group_concat(col)返回指定列的值,但是会分组显示,也就是说分组显示指定列组合后的结果,这样说不容易明白,我们来看个例子,比如,将学生表中的学生按性别分组,并且显示男生组有哪些学生,女生组有哪些学生,示例如下。

mysql/mariadb知识点总结(15):select语句总结之二:分组与聚合

 

那么,如果我们想要对分组后的信息再次过滤,该怎么办呢,举个例子,如下:

mysql/mariadb知识点总结(15):select语句总结之二:分组与聚合

从上例可以看出,如果想要对分组过后的信息再次过滤,可以使用having关键字。

 

好了,此处总结一些常用示例:

查询students表,以性别为分组,求出分组后的年龄之和。

 

查询students表,以classid分组,显示平均年龄大于25的classid。

 

查询students表,以性别字段gender分组,显示各组中年龄大于19的学员的年龄的总和。

 

分组与聚合先总结到这里,下一篇文章中将会总结多表查询的select语句,直达链接 select语句总结之多表查询

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: