0


第9讲:DQL数据查询语句之GROUP BY分组查询示例

DQL数据查询语句之GROUP BY分组查询示例

文章目录

1.分组查询概念以及语法格式

分组查询的概念

所谓的分组查询指的是,将一个可以被用作“分组、分类”的字段,根据查询语法把这个字段中的数据分成不同的几类,每一类都相当于一个分组。

使用分组查询时,依照的字段必须具有分组的意义,例如部门、性别、所在地、类型等等这种字段,这些字段的内容大多数都是重复值,可能没有几个是不重复的值,针对这一的字段就可以进行分组查询,像ID、时间、姓名、年龄等等这类的字段,几乎没有重复值,就不适合做分组查询,当然你执行分组查询命令也没有任何问题,只不过就是没有任何的意义。

分组查询的应用场景有很多,例如统计男性女性各有多少人,年度每个月营业额分别是多少、平均营业额多少等等,都是按照某个类型这种字段进行分组查询的,分组查询都会配合聚合函数来进行统计。

GROUP BY分组查询就是方便运维去进行数据统计的。

分组查询的语法结构:

SELECT 字段列表,[聚合函数] FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后的过滤条件]

在使用分组查询语法时,可以先用where条件查询出满足特定条件的数据,然后通过group by进行分组,最后也可以通过having对分组后的数据进行条件的过滤。

where与having两种条件过滤的区别:

  • 执行的时机不同 - where条件是在分组之前进行的数据过滤,只有满足where条件的数据才会参与分组,不满足where条件的数据不会参与分组查询。- having条件是在分组之后执行的条件,也就是数据被分组后,在对特定的条件进行过滤。
  • 判断的条件不同 - where条件不能对聚合函数进行判断,而having条件则可以。- 分组查询很多情况下都会使用聚合函数进行逻辑取值。

所谓的参与分组查询指的“当group by分组完成后,满足特定条件的数据会被记录到某个的分组下。”

例如我们对性别字段进行分组查询,表中有7个男性3个女性,则满足男性分组条件的人员会被记录到男性分组中,满足女性分组条件的人员会被记录到男性分组下。以组为单位划分。

分组查询的执行顺序:select—>where条件—>group by—>having 聚合函数。

注意:分组之后,查询的字段一般为聚合函数或者是分组的字段,否则查询其他字段没有意义。

在使用分组查询时,select后面的内容一定是一个聚合函数,否则就会报错语法不正确。

2.常见的GROUP BY分组查询示例锦集

依旧按照前面创建的新冠疫苗接种信息表来演示常用的聚合函数示例。

image-20220507221238293

2.1.统计表中男性女性人员的数量

根据表中的性别进行分组,然后分别统计出表中男性人员和女性人员的数量。

select xb,count(*)from jszx_xgymjzxxb groupby xb;

使用group by进行分组查询,在前面要配合聚合函数来使用,在聚合函数前面也可以加上要分组的字段,由于在聚合函数前面增加了分组的字段,因此会显示的特别清晰,最后查询效果如下男性有9人,女性有6人。

image-20220509220241048

2.2.统计男性女性人员的平均年龄

根据性别分组,统计出表中男性人员和女性人员的平均年龄。

select xb,avg(nl)from jszx_xgymjzxxb groupby xb;

首先根据性别进行分组,由于是要求男女的平均年龄,所以在select后面要跟上分组的字段以及求平均值的字段,查询效果如下,男性的平均年龄是31岁,女性的平均年龄是26岁。

image-20220509221018103

2.3.高级分组查询案例

首先查询出年龄小于等于35岁的人员,然后根据所在地进行分组查询,分组查询后再过滤出所在地大于5个人员的数据。

1)我们首先根据所在地分组,然后查询出小于等于35岁的人员数量。

select szd,count(*)from jszx_xgymjzxxb where nl <='35 'groupby szd 

查询结果如下,这里提一句,在select后面添加的聚合函数,也会被当做为字段名称显示出来,同样既然是字段名了就可以被后面的having当做条件使用。

image-20220509221603261

2)在上面已经查询出35岁人员在每个地区的人员数量,下面根据分组查询后的结果再次进行条件筛选,最终得到所在地人员大于5的地区。

select szd,count(*)from jszx_xgymjzxxb where nl <='35 'groupby szd HAVINGcount(*)>'5';

image-20220509222434684

3)在前面说到聚合函数被分组查询后,就会被当做一个字段名称,那么直接将聚合函数作为字段名称显示,有点不易懂,我们可以为聚合函数的字段名称起一个别名,在分组后的筛选条件里就可以使用别名来进行筛选了。

select szd as 所在地,count(*)as 人员数量 from jszx_xgymjzxxb where nl <='35 'groupby szd HAVING 人员数量 >'5';

查询结果如下,having之后由原来的聚合函数字段名修改成了别名,进行条件筛选。

image-20220509222734779

标签: 数据库 SQL MySQL

本文转载自: https://blog.csdn.net/weixin_44953658/article/details/126477823
版权归原作者 Jiangxl~ 所有, 如有侵权,请联系我们删除。

“第9讲:DQL数据查询语句之GROUP BY分组查询示例”的评论:

还没有评论