1. 插入测试数据
为了后面演示方便,这里向 course 表插入测试数据:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
执行结果如下图:
2. 单字段分组
先查看 course 表所有数据:
- 1
以表 course 为例,需要查出所有课程教师相关信息,按照 teacher_id 字段分组可去除重复数据:
- 1
根据上面分组结果还可以使用 LEFT JOIN 连接查询分组:
- 1
3. 多字段分组
以查询学生选课关联表为例,查询学生选课相关信息:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
上图是不同学生选课相关的信息数据,可以使用 GROUP BY 按照 teacher_id、course_id 分组来展示所有教师的所有课程信息:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
执行结果如下图:
4. 小结
本小节介绍了如何使用 GROUP BY 对查询结果集分组筛选出想要的内容,相对于前面小节的内容来说,本小节 GROUP BY 分组较为复杂,需要仔细的体会和思考,需要注意的是使用 GROUP BY 分组时,要将 MySQL 的 sql model 配置中 ONLY_FULL_GROUP_BY 的值去除掉,如果有该 sql_model 配置,在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个 SQL 是不合法的,这样的严格模式对新手不友好,需要去除该配置,查看当前 sql_model 配置命令:
- 1
执行结果如下图:
上图中 sql_model 中并没有 ONLY_FULL_GROUP_BY 配置值,若想要配置 sql_mode 则可以在 MySQL 配置文件中 [mysqld] 下面增加 sql_model,设置好之后,重启 MySQL 即可,内容如下格式:
- 1