但行好事
莫论前程❤

MySQL数据库系列(15)—-select语句总结之二:分组与聚合

这篇文章总结一下mysql中select语句的分组与聚合.

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

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

我们根据性别对上述数据进行分组:

$ select * from students group by gender;

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

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

我们说过,分组的目的往往是对分组后的数据进行”聚合操作”,什么意思呢?

$ select count(stuid) ,gender from students group by gender;
-------------------------------
count(stuid)    |  gender
    10              F
    15              M

上述操作,我们通过性别对数据进行了分组,然后算出了每组中的人员数量,也就是说,我们算出了女性和男性的各自数量.而上述中的count(stuid)就是一种”聚合操作”.count()是一种 聚合函数, 这个聚合函数能够算出数据的数目数量.上述的count(stuid)表示算出分组后的每组的stuid的数量,这就是所谓的”分组的目的往往是为了聚合操作”的含义.

常见的聚合函数有:

  • min(col) 返回指定列的最小值
  • max(col) 返回指定列的最大值
  • avg(col) 返回指定列的平均值
  • count(col) 返回指定列中非null值的个数
  • sum(col)返回指定列的所有值之和
  • group_concat(col)返回指定列的值,但是会分组显示,也就是说分组显示指定列组合的结果
$ select counter,GROUP_CONCAT(computername) from aliveuser_counter GROUP BY counter;
----------------------------
counter    |  computername
0          |     CP1,CP2,CP3
1          |     DP1,DP2,DP3 

对分组后的信息再次过滤having avgage> 10

$ select avg(age) as avgage,gender from students group by gender;
---------------------------------------------------------------
avgage      |      gender
19.0000     |        F
33.0000     |        M
$ select avg(age) as avgage,gender from students group by gender having avgage > 20;
---------------------------------------------------------------
avgage      |      gender
33.0000     |        M

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

总结

  • 查询students表,以性别为分组,求出分组后的年龄之和.
select gender,sum(age) from students group by gender;
  • 查询students表,以classid分组,显示平均年龄大于25的classid;
select classid avg(age) as avgage from students group by classid having avgage > 25;
  • 查询 students,以性别字段gender分组,显示各组中年龄大于19的学员的年龄的总和.
select sum(age) from students where age > 19 group by gender;
赞(1) 打赏
未经允许不得转载:刘鹏博客 » MySQL数据库系列(15)—-select语句总结之二:分组与聚合
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏