1、分组查询介绍
分组查询就是将查询结果按照指定字段进行分组,字段中数据相等的分为一组。
分组查询语法格式:
GROUP BY 列名 [HAVING 条件表达式] [WITH ROLLUP]
说明:
①、列名:是指按照指定字段值进行分组。
②、HAVING:条件表达式,用来过滤分组后的数据。
③、WITH ROLLUP:在所有记录的最后加上一条记录,显示select查询时聚合函数的统计和计算结果。
2、GROUP BY的使用
GROUP BY可用于单个字段分组,也可用作多个字段分组。
例:根据性别字段来分组
SELECT gender FROM `students` GROUP BY `gender` ;
例:根据姓名和性别进行分组
SELECT name,gender FROM `students` GROUP BY name,gender ;
3、GROUP BY+GROUP_CONCAT()
GROUP_CONCAT(字段名):统计每个分组指定字段的信息集合,每个信息之间用逗号进行分割。
例:查询学生表中所有男同学的名字和所有女同学的名字
SELECT gender, GROUP_CONCAT(name) FROM `students` GROUP BY `gender` ;
4、GROUP BY+聚合函数的使用
例:统计学生表里所有男生人数与女生人数
SELECT gender, COUNT( *) FROM `students` GROUP BY `gender` ;
5、GROUP BY+HAVING的使用
HAVING作用和WHERE类似,都是过滤数据的,但HAVING是过滤分组数据的,只能用于GROUP BY。
例:统计学生表里所有男生人数与女生人数,如果男生或女生人数小于6人,则不统计该分组
SELECT gender, COUNT( *) FROM `students` GROUP BY `gender` HAVING COUNT( *) >6;
6、GROUP BY+WITH ROLLUP的使用
WITH ROLLUP的作用是在最后记录后面新增一行,显示select查询时聚合函数的统计和计算结果。
例:统计学生表里所有男生人数与女生人数,并在最后做男女生总人数汇总记录
SELECT gender, COUNT( *) FROM `students` GROUP BY `gender` WITH ROLLUP ;