1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| -- 作用:按照某种逻辑分类分组,然后以组为单位统计分析数据。根据情况判断是否需要where过滤 -- 使用:分组后不能使用表内定义字段作为select后的查询字段,需要配合聚合函数使用;由于MySQL数据库中不允许一行数据与多行数据对应,因此需要使用聚合函数将多个数据整合为与分组依据对应的一个数据。 -- max()/min()最大/最小 select teacher, min(score) from info group by teacher; -- 每个老师所带的学生的最低分数 -- avg() 平均数 select grade, avg(score) from info group by grade; -- 每个年级的平均分 -- count() 计数 select teacher, count(id) from info group by teacher; -- 统计每个老师带的学生数量 -- sum() 总和 select grade, sum(score) from info group by grade; -- 统计每个年级学生的总分 -- group_concat(),列转行,将group by产生的同一个分组中的值连接起来,返回一个字符串结果。group_concat函数首先根据group by指定的列进行分组,将同一组的列转换成行出来。 select grade, avg(score), group_concat(name) from info group by grade;-- 统计每个年级的平均分,并且列出每个年级学生的名字 -- 补充:可以使用as给字段起别名,as可以省略 select grade as '年级', avg(score) as '平均分' from info group by grade; -- 每个年级的平均分 -- 和where子句结合使用 select grade, age, avg(score) as '平均分' from info where grade=1 group by age; -- 统计一年级中不同年龄的分数平均值 -- 使用分组group by注意事项 <1> 关键字where和group by同时出现的时候group by必须在where的后面 <2> where先对整体数据进行过滤之后再分组操作 <3> where后面的筛选条件不能使用聚合函数
|