前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 基础知识笔记 第04期:分组查询和聚集函数

MySQL 基础知识笔记 第04期:分组查询和聚集函数

作者头像
数据库交流
发布2022-04-25 09:02:39
4190
发布2022-04-25 09:02:39
举报
文章被收录于专栏:悦专栏

这一节内容,来通过一张测试表,进行 MySQL 分组查询和聚集函数的练习。

1 数据准备

建表及数据准备,以便后面 SQL 练习:

代码语言:javascript
复制
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_id,stu_name,stu_class,stu_score) values(1,'zhang','1班',80),(2,'wang','1班',90),(3,'zhao','2班',80),(4,'liu','2班',86),(5,'duan','2班',88);

2 查询全表数据

查询全表数据,方便后面实验时进行对比。

代码语言:javascript
复制
select * from student_info;

3 显示总人数

代码语言:javascript
复制
select count(*) from student_info;

count(*) 表示记录总数。

4 显示每个班级的人数

代码语言:javascript
复制
select stu_class,count(*) from student_info group by stu_class;

group by 表示分组 该语句表示对 stu_class 字段分组,然后显示 stu_class 和每一组 stu_class 的数据量。

5 按班级分开显示学生名字

代码语言:javascript
复制
select stu_class,group_concat(stu_name) from student_info group by stu_class;

6 显示每个班的最高分

代码语言:javascript
复制
select stu_class,max(stu_score) as maxscore from student_info group by stu_class;

max 表示求最大值。 SQL 表示按 stu_class 分组后,显示 stu_class 和每一组的 stu_score 最大值。

7 显示每个班的平均分数

代码语言:javascript
复制
select stu_class,avg(stu_score) as avgscore from student_info group by stu_class;

avg 表示求平均数。 SQL 表示对 stu_class 分组后,显示 stu_class 和对应的 stu_score 平均值。

8 显示每个班的总分

代码语言:javascript
复制
select stu_class,sum(stu_score) as avgscore from student_info group by stu_class;

sum 表示求和 SQL 表示对 stu_class 分组后,显示 stu_class 和对应的 stu_score 总和。

9 显示平均分大于或等于 85 的班级

代码语言:javascript
复制
select stu_class,avg(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 平均数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 悦专栏 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 数据准备
  • 2 查询全表数据
  • 3 显示总人数
  • 4 显示每个班级的人数
  • 5 按班级分开显示学生名字
  • 6 显示每个班的最高分
  • 7 显示每个班的平均分数
  • 8 显示每个班的总分
  • 9 显示平均分大于或等于 85 的班级
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档