30、MySQL 教程 - MySQL 高级查询-group by子句

这篇来学习group by字句。Group by就是分组的意思,根据某个字段进行分组。

基本语法:group by 字段名;

使用前面的学生表,我们来进行练习

举例:根据性别分组

 

根据上面显示,我们使用了分组语句,结果出现了数据丢失的情况。分组之后男和女只显示一条数据。

在SQL中分组是为了统计数据,SQL提供了一系列统计函数供我们使用。

1)Count(): 统计分组后的记录数,每一组有多少记录

2)Max(): 统计每组中最大值

3)Min(): 统计最小值

4)Avg(): 统计平均值。

5)Sum(): 统计和

举例:分组统计:身高高矮,年龄平均和总年龄

 

上面表显示男和女各有2个,男里面最高175,女里面最高165,还有后面的平均年龄和最矮身高。所以,如果你在SQL语句中使用了group by,但是没有用到上面函数的一个或者几个,那么分组就没有意义,就想我们文章开头查询的结果。

Count函数

Count函数里面可以使用两种参数:*代表统计记录,字段名代表统计对应字段(Null不统计)。

举例:下面我们先准备一个字段为null,例如把其中一个学生age设置值为null。

 

然后分别用count(*)和count(age)分组查询进行对比。

 

由于我们之前把lily这个女性的age设置成null,所以count(age)在女性分组里的统计数显示为1.

分组会自动根据分组字段排序,默认升序。

基本语法:group by 字段[ase 或者 desc];-- 效果是对分组的结果合并后进行排序

 

默认female排序在前,升序这里当然是安装字母顺序,desc表示降序,效果就是男性在前,女性在后。

多字段分组

为了演示效果,我们给当前学生表新增一个班级字段,效果如下。

 

下面先按照班级,然后按照性别进行分组

 

上面可以看到java01班级有一个女,有一个男,java02班有一个女,也有一个男。这种情况可以实现,每个班级有多少个女和多少个男的统计。那么可不可以统计,每个班级女的和男的叫什么。

 

这里有一个函数,叫group_concat(字段),效果就像上面那样。