数据库分组的作用
分组是数据库中数据统计的一个重要功能,所谓分组就是将数据库查询得到的结果以某些字段作为分割条件将查询结果分成多组,然后我们就可以对每一组数据应用各种统计函数比如max,count等等。
例子
为了简化起见我们这里就使用一个表student表,建表和插入语句如下:
create table student(
id int PRIMARY key AUTO_INCREMENT,
name VARCHAR(200),
sch_name varchar(200),
age int
);
insert into student(sch_name,name,age) values('合肥工业大学','张三',23);
insert into student(sch_name,name,age) values('合肥工业大学','李四',24);
insert into student(sch_name,name,age) values('合肥工业大学','王五',22);
insert into student(sch_name,name,age) values('合肥工业大学','王鹏',19);
insert into student(sch_name,name,age) values('安徽大学','罗田',26);
insert into student(sch_name,name,age) values('安徽大学','刘正',21);
insert into student(sch_name,name,age) values('安徽大学','刘备',23);
insert into student(sch_name,name,age) values('安徽大学','孙权',19);
insert into student(sch_name,name,age) values('安徽大学','曹操',22);
insert into student(sch_name,name,age) values('中国科技大学','诸葛亮',28);
insert into student(sch_name,name,age) values('中国科技大学','张飞',26);
insert into student(sch_name,name,age) values('中国科技大学','关羽',25);
首先看下分组的形象概念,假设我们使用group by sch_name来查询,此时我们可以理解为得到如下的数据:
现在我们看一下以下几个统计的例子
- 查询出每个学校及学校学生的人数
select sch_name ‘校名’,count(*) ‘学生总数’ from student group by sch_name
- 查询每个学校的平均年龄
select sch_name ‘校名’,avg(age) ‘平均年龄’ from student group by sch_name
- 查询每个学校年龄最大的同学和年龄最小的同学的年龄
select sch_name ‘校名’,max(age) ‘最大年龄’,min(age) ‘最小年龄’ from student group by sch_name
4.统计每个学校的学生姓名,注意使用group_concat函数
select sch_name ‘校名’,group_concat(name) ‘姓名组’ from student group by sch_name