在对数据表中数据进行统计时,可能须要按照必定的类别分别进行统计,好比,分别统计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后,却没有包含在聚合函数中,该字段显示的是,分组后的第一条记录的值,这样,可能会致使查询结果不符合咱们的预期函数
单独使用GROUP BY关键字,查询的是每一个分组中的一条记录xml
查询student表中的记录,安装gender字段值进行分组blog
能够看出,返回了3条记录,分别是gender字段值为NULL、nv、na的记录,查询结果按照gender字段中不一样的值进行了分类,而后,值显示每一个分组中的一条记录,意义不大,通常状况下,GROUP BY都和聚合函数一块儿使用图片
GROUP BY和聚合函数,一块儿使用,能够统计出某个,或者某些字段在一个分组中的最大值、最小值、平均值it
查询student表,按照gender字段值进行分组,计算出每一个分组中各有多少名学生webkit
能够看出,GROUP BY对gender字段进行了分组,而后,经过COUNT()函数统计出了每组的数量im
HAVING关键字和WHERE关键字的做用相同,都是用于设置条件表达式,对查询结果进行过滤。统计
二者的区别,HAVING关键字后,能够跟聚合函数,而WHERE关键字不能,一般状况下,HAVING关键字,都是和GROUP BY一块儿使用,用于对分组后的结果进行过滤
查询student表,按照gender字段进行分组,查询出grade字段值之和小于300的分组
能够看出,只有gender字段值为NULL和nv的分组,grade字段值之和小于300
验证查询结果,对gender字段值为na的记录,grade字段值之和进行查询
能够看出,gender字段值为na,全部学生的grade字段之和为523