分组查询的使用场景为:按照某个指标将信息进行归类。
select 分组字段名,聚合函数 from 表名 where 筛选条件 group by 分组字段 having 筛选条件1;
group by:对过滤完的数据再进行分组归类;分组后会对表中数据折叠,数据分为几组,就会显示几行。
having 筛选条件1: 对归类之后的信息再次进行过滤
聚合函数
1、count:如果没有分组,统计查询结果有几行,如果有分组,统计的每个组内有几行数据。
count(*):统计的数据存在空值也会计数
count(字段名):有空值不计数。
select col_id,count(*) from tb_student group by col_id;
-- 注:tb_student为学生table,col_id为每个学生所属的学院编号。该代码为计算每个学院有多少名学生
2、sum (字段名):如果没有分组,统计该字段查询结果有几行,如果有分组,统计的该组下对应字段内有几行数据。
elect stu_id,sum(score) from tb_record group by stu_id;-- 计算每个学生的总成绩
3、avg(字段名):如果没有分组,统计查询结果中该字段的平均值,如果有分组,统计该组下对应字段的数据平均值。
4、max(字段名):如果没有分组,统计查询结果中该字段的最大值,如果有分组,统计该组下对应字段的数据最大值。
5、min(字段名):如果没有分组,统计查询结果中该字段的最小值,如果有分组,统计该组下对应字段的数据最小值。
6、group_concat(字段名):应用于分组后某个字段的数据值是多个的。例如:展示每个学院的学生姓名。
select col_id,group_concat(stu_name) from tb_student group by col_id;
group_concat(字段名 order by 字段名 asc|desc):拼接信息时可以按照数据值排序,asc为升序,desc为降序。