MySQL 数据分组
GROUP BY分组
1. 插入测试数据
向 course 表插入测试数据:
bash
INSERT INTO course (course_name,teacher_id) VALUES
('毛概',1),
('线性代数',2),
('政治',3),
('程序设计语言',1),
('离散数学',2),
('编译技术',3),
('嵌入式基础',1),
('单片机原理',2),
('图像处理',3),
('数字信号处理',1),
('专业英语',2),
('网络编程',3);
执行结果如下图:
2. 单字段分组
查看 course 表所有数据:
sql
SELECT \* FROM course;
查询结果如下图:
以表 course
为例,需要查出所有课程教师相关信息,按照 teacher_id
字段分组可去除重复数据:
sql
SELECT teacher_id FROM course GROUP BY teacher_id;
查询结果如下图:
根据上面分组结果还可以使用 LEFT JOIN
连接查询分组:
sql
SELECT c.teacher_id,t.\* FROM course c LEFT JOIN teacher t ON c.teacher_id=t.id GROUP BY c.teacher_id;
执行结果如下图:
3. 多字段分组
查询学生选课相关信息:
sql
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
分组来展示所有教师的所有课程信息:
bash
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;
执行结果如下图:
单字段分组和多字段分组的区别
- 单字段 是以一个字段来判断数据是否重复分组出来的结果
- 多字段 分组是以多个字段同时来判断是否重复分组出来的结果