MySQL分组查询跟聚合函数

MySQL分组查询跟聚合函数

一、分组查询的语句

GROUP BY { <列名> | <表达式> | <位置> } [ASC | DESC]

这个语句中间{ <列名> | <表达式> | <位置> }里面我只讨论列名,而后面的[ASC | DESC]是order by(排序)子句
  1. 分组查询就是将结果集中的数据行根据选择列的值进行逻辑分组,以便能汇总表内容的子集,实现对每个组而不是对整个结果集进行整合。
  2. 概念太抽象 砸萌 来一点形象的例子:下面第一张就是表goods的数据跟结构
    在这里插入图片描述

在这里插入图片描述

  1. 这第二张图片便是单独的分组查询后得到的结果。效果也看到了,就是把商品类型相同的行整合到一行,显然这样单独使用group by语句没什么实际意义,所以group by 一般都跟聚合函数使用。 select category from goods便是从表goods中查询字段category的所有数据,最后面group by category是根据字段category进行分组

二、聚合函数

  1. 聚合函数也就是几个,sum()求和、max()筛选出最大值、min()筛选出最小值、avg()求平均值、 count()计算表的记录数(也就是多少含行)
  2. 这里我就来写一下count(),其他估计以你们的聪明才智自己随便搞一下就会了count(*)这种遇到null也会计算,而count(字段名)这种遇到null就不会计算,如下图:
    这张是goods表,可以看到一共有11条记录在这里插入图片描述

这是使用了count()计算的结果在这里插入图片描述
这是使用了count(areaID)后的查询结果,结果为10行,刚刚好在goods表字段areaID中最后一条记录(行)的值为null,所以不计算最后一行,结果自然是11-1=10

三、聚合函数跟group by 子句

聚合函数是把最后一行的结果压缩为一行,所以使用的时候最适合跟group by分组查询一起使用了。意思是在一个集合里面可以把group by的每一组看做这个集合的子集,这些子集所有的元素数量跟该集合的元素数量一样多,也可以不一样,主要还是看需求

  • 题目:按照商品类型分组统计商品数量和平均单价,并按平均单价升序显示
    -解析: 按照商品类型分组,然后计算每个组的商品数量和平均单价,并按平均单价升序显示

语法:{查询语句} GROUP BY { <列名> | <表达式> | <位置> } [ASC | DESC]

这张是没有排序的,这就是分组查询跟聚合函数一起使用的效果,可以看到这个是把表分成三组,对每组的数据进行统加工。SELECT category 类型,COUNT(*) 数量,AVG(unitPrice) 平均单价 FROM goods GROUP BY category ORDER BY 平均单价,其中category 类型可以写成category as 类型 起别名,就像我们的小名一样。
在这里插入图片描述
这张就是在第一张的基础上加了order by 排序,是默认升序的。降序order by 列名 desc,升序是order by 列名 asc。
在这里插入图片描述

如果对你有帮助就点个赞哦