GROUP BY分组
发布时间:2023-03-06 14:30:47 所属栏目:MySql教程 来源:
导读:GROUP BY分组
本小节介绍如何对查询结果使用 GROUP BY 分组,GROUP BY 分组是对指定一个或多个字段分组,使用分组可以较好地对数据结果分析和处理。
1. 插入测试数据
为了后面演示方便,这里向 course 表插入测
本小节介绍如何对查询结果使用 GROUP BY 分组,GROUP BY 分组是对指定一个或多个字段分组,使用分组可以较好地对数据结果分析和处理。
1. 插入测试数据
为了后面演示方便,这里向 course 表插入测
|
GROUP BY分组 本小节介绍如何对查询结果使用 GROUP BY 分组,GROUP BY 分组是对指定一个或多个字段分组,使用分组可以较好地对数据结果分析和处理。 1. 插入测试数据 为了后面演示方便,这里向 course 表插入测试数据: INSERT INTO course (course_name,teacher_id) VALUES('毛概',),('线性代数',),('政治',),('程序设计语言',),('离散数学',),('编译技术',),('嵌入式基础',),('单片机原理',),('图像处理',),('数字信号处理',),('专业英语',),('网络编程',); 2. 单字段分组 先查看 course 表所有数据: SELECT * FROM course; 以表 course 为例,需要查出所有课程教师相关信息,按照 teacher_id 字段分组可去除重复数据: SELECT teacher_id FROM course GROUP BY teacher_id; 根据上面分组结果还可以使用 LEFT JOIN 连接查询分组: SELECT .teacher_id,t.* FROM course LEFT JOIN teacher t ON .teacher_id=t.id GROUP BY .teacher_id; 3. 多字段分组 以查询学生选课关联表为例,查询学生选课相关信息: SELECT * FROM student_course INNER JOIN student ON .student_id=.id INNER JOIN course ON .course_id=.id INNER JOIN teacher ON .teacher_id=.id; 上图是不同学生选课相关的信息数据,可以使用 GROUP BY 按照 teacher_id、course_id 分组来展示所有教师的所有课程信息: SELECT .teacher_id,.course_id,.course_name,.nameFROM student_course INNER JOIN student ON .student_id=.id INNER JOIN course ON .course_id=.id INNER JOIN teacher ON .teacher_id=.id GROUP BY .teacher_id,.course_id; Tips:单字段分组和多字段分组的区别在于,单字段是以一个字段来判断数据是否重复分组出来的结果,多字段分组是以多个字段同时来判断是否重复分组出来的结果。 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; sql_model 中并没有 ONLY_FULL_GROUP_BY 配置值,若想要配置 sql_mode 则可以在 MysqL 配置文件中 [MysqLd] 下面增加 sql_model,设置好之后,重启 MysqL 即可,内容如下格式: sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
