MySQL分组查询

在对数据表中数据进行统计时,可能须要按照必定的类别分别进行统计,好比,分别统计student表中,gender字段值为na、nv和NULL的学生成绩grade之和web

MySQL中,使用GROUP BY按某个字段,或者多个字段中的值,进行分组,字段中值相同的为一组
SELECT 字段名1,字段名2,……
FROM 表名
WHERE BY 字段名1,字段名2,……[HAVING 条件表达式];svg

参数说明

指定的字段名一、字段名2,是对查询结果分组的依据
HAVING关键字,指定条件表达式,对分组后的内容进行过滤
GROUP BY,通常和聚合函数一块儿使用,若是,查询的字段出如今GROUP BY后,却没有包含在聚合函数中,该字段显示的是,分组后的第一条记录的值,这样,可能会致使查询结果不符合咱们的预期函数

1、单独使用GROUP BY分组

单独使用GROUP BY关键字,查询的是每一个分组中的一条记录xml

查询student表中的记录,安装gender字段值进行分组blog

这里写图片描述

能够看出,返回了3条记录,分别是gender字段值为NULL、nv、na的记录,查询结果按照gender字段中不一样的值进行了分类,而后,值显示每一个分组中的一条记录,意义不大,通常状况下,GROUP BY都和聚合函数一块儿使用图片

2、GROUP BY和聚合函数,一块儿使用

GROUP BY和聚合函数,一块儿使用,能够统计出某个,或者某些字段在一个分组中的最大值、最小值、平均值it

查询student表,按照gender字段值进行分组,计算出每一个分组中各有多少名学生webkit

这里写图片描述

能够看出,GROUP BY对gender字段进行了分组,而后,经过COUNT()函数统计出了每组的数量im

3、GROUP BY和HAVING关键字,一块儿使用

HAVING关键字和WHERE关键字的做用相同,都是用于设置条件表达式,对查询结果进行过滤。统计

二者的区别,HAVING关键字后,能够跟聚合函数,而WHERE关键字不能,一般状况下,HAVING关键字,都是和GROUP BY一块儿使用,用于对分组后的结果进行过滤

查询student表,按照gender字段进行分组,查询出grade字段值之和小于300的分组

这里写图片描述

能够看出,只有gender字段值为NULL和nv的分组,grade字段值之和小于300

验证查询结果,对gender字段值为na的记录,grade字段值之和进行查询

这里写图片描述

能够看出,gender字段值为na,全部学生的grade字段之和为523