文章图片
【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;
having 作用是筛选分组之后的数据 , where 表示筛选分组之前的数据 。
SQL 表示对 stu_class 分组后 , 显示出所有 stu_class 组中 stu_score 平均数大于或等于 85 的 stu_class 值和 stu_score 平均数 。
搜索“IT职场学堂” , 一键关注 , 全平台同步发布 。
- MySQL|MySQL怎么查询表中某个字段值重复的数据
- MySQL|我,华为的程序员,年薪40万,告诉你程序员的年终奖金有多少
- MySQL|科技让世界美好,而现实则在变艰难变糟
- MySQL|75英寸电视太大?买电视就是越大越好!四款产品推荐,3999元封顶
- MySQL|跌至2069元!8GB运存+256GB+骁龙870,用多种实用功能打动人!
- MySQL|一加10Pro对比iQOO9Pro,哪款更值得购买?
- MySQL|小米市值崩了,小米两名高管离职,包括常程
- MySQL|他靠“医院”赚千亿,打造“医疗界华为”,已移民新加坡成为首富
- MySQL|第四季度手机市场占有率出炉:iPhone成最大赢家,realme发展迅速
- MySQL|华为突然上架三款手机,全部支持双模5G,标配鸿蒙OS仅售2799元起