AI 概述
1. 插入测试数据2. 单字段分组3. 多字段分组4. 小结 本小节介绍如何对查询结果使用 GROUP BY 分组,GROUP BY 分组是对指定一个或多个字段分组,使用分组可以较好地对数据结果分析和处理。 1. 插入测试数据 为了后面演示方便,这里向 course 表插入测试数据: INSERT INTO course (course_name,teacher_...
目录
文章目录隐藏
  1. 1. 插入测试数据
  2. 2. 单字段分组
  3. 3. 多字段分组
  4. 4. 小结

本小节介绍如何对查询结果使用 GROUP BY 分组,GROUP BY 分组是对指定一个或多个字段分组,使用分组可以较好地对数据结果分析和处理。

1. 插入测试数据

为了后面演示方便,这里向 course 表插入测试数据:

INSERT INTO course (course_name,teacher_id) VALUES
('毛概',1),
('线性代数',2),
('政治',3),
('程序设计语言',1),
('离散数学',2),
('编译技术',3),
('嵌入式基础',1),
('单片机原理',2),
('图像处理',3),
('数字信号处理',1),
('专业英语',2),
('网络编程',3);

执行结果如下图:

GROUP BY 分组

2. 单字段分组

先查看 course 表所有数据:

SELECT * FROM course;

查询结果如下图:

GROUP BY 分组

以表 course 为例,需要查出所有课程教师相关信息,按照 teacher_id 字段分组可去除重复数据:

SELECT teacher_id FROM course GROUP BY teacher_id;

查询结果如下图:

单字段分组

根据上面分组结果还可以使用 LEFT JOIN 连接查询分组:

SELECT c.teacher_id,t.* FROM course c LEFT JOIN teacher t ON c.teacher_id=t.id GROUP BY c.teacher_id;

执行结果如下图:

使用 LEFT JOIN 连接查询分组

3. 多字段分组

以查询学生选课关联表为例,查询学生选课相关信息:

SELECT * FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN 
course c 
ON a.course_id=c.id 
INNER JOIN teacher d 
ON c.teacher_id=d.id;

查询结果如下图:

多字段分组

上图是不同学生选课相关的信息数据,可以使用 GROUP BY 按照 teacher_id、course_id 分组来展示所有教师的所有课程信息:

SELECT c.teacher_id,a.course_id,c.course_name,d.name
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN course c 
ON a.course_id=c.id 
INNER JOIN teacher d
ON c.teacher_id=d.id 
GROUP BY c.teacher_id,a.course_id;

执行结果如下图:

使用 GROUP BY

单字段分组和多字段分组的区别在于,单字段是以一个字段来判断数据是否重复分组出来的结果,多字段分组是以多个字段同时来判断是否重复分组出来的结果。

4. 小结

本小节介绍了如何使用 GROUP BY 对查询结果集分组筛选出想要的内容,相对于前面小节的内容来说,本小节 GROUP BY 分组较为复杂,需要仔细的体会和思考,需要注意的是使用 GROUP BY 分组时,要将 MySQL 的 sql model 配置中 ONLY_FULL_GROUP_BY 的值去除掉,如果有该 sql_model 配置,在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个 SQL 是不合法的,这样的严格模式对新手不友好,需要去除该配置,查看当前 sql_model 配置命令:

SELECT @@sql_mode;

执行结果如下图:

GROUP BY 分组

上图中 sql_model 中并没有 ONLY_FULL_GROUP_BY 配置值,若想要配置 sql_mode 则可以在 MySQL 配置文件中 [mysqld] 下面增加 sql_model,设置好之后,重启 MySQL 即可,内容如下格式:

sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

以上关于25. GROUP BY分组的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 25. GROUP BY分组

发表回复