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' (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |