MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04

MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04

文章图片

【MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04】MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04

文章图片

MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04

文章图片

MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04

文章图片

MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04

《DBA技能包》系列是数据库技术储备专栏 , 这是第04期 , 讲了MySQL分组查询和聚焦函数的实战和应用 。

这一节内容 , 来通过一张测试表 , 进行 MySQL 分组查询和聚集函数的练习 。
1 数据准备
建表及数据准备 , 以便后面 SQL 练习:
use yzl; /* 使用yzl这个database */
drop table if exists student_info; /* 如果表student_info存在则删除表student_info */
CREATE TABLE `student_info` ( /* 创建表student_info */
`id` int(11) NOT NULL auto_increment
`stu_id` int(11) DEFAULT NULL COMMENT '学生ID'
`stu_name` varchar(30) DEFAULT NULL COMMENT '学生姓名'
`stu_class` varchar(30) DEFAULT NULL COMMENT '学生班级'
`stu_score` int(11) DEFAULT NULL COMMENT '学生分数'
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间'
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP
COMMENT '记录更新时间'
PRIMARY KEY (`id`)
KEY `idx_stu_id` (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into student_info(stu_idstu_namestu_classstu_score) values(1'zhang''1班'80)(2'wang''1班'90)(3'zhao''2班'80)(4'liu''2班'86)(5'duan''2班'88);
2 查询全表数据
查询全表数据 , 方便后面实验时进行对比 。
select * from student_info;

3 显示总人数
select count(*) from student_info;

count(*) 表示记录总数 。
4 显示每个班级的人数
select stu_classcount(*) from student_info group by stu_class;

group by 表示分组
该语句表示对 stu_class 字段分组 , 然后显示 stu_class 和每一组 stu_class 的数据量 。
5 按班级分开显示学生名字
select stu_classgroup_concat(stu_name) from student_info group by stu_class;

6 显示每个班的最高分
select stu_classmax(stu_score) as maxscore from student_info group by stu_class;

max 表示求最大值 。
SQL 表示按 stu_class 分组后 , 显示 stu_class 和每一组的 stu_score 最大值 。
7 显示每个班的平均分数
select stu_classavg(stu_score) as avgscore from student_info group by stu_class;

avg 表示求平均数 。
SQL 表示对 stu_class 分组后 , 显示 stu_class 和对应的 stu_score 平均值 。
8 显示每个班的总分
select stu_classsum(stu_score) as avgscore from student_info group by stu_class;

sum 表示求和
SQL 表示对 stu_class 分组后 , 显示 stu_class 和对应的 stu_score 总和 。
9 显示平均分大于或等于 85 的班级
select stu_classavg(stu_score) as avgscore from student_info group by stu_class having avgscore>=85;