Skip to content

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);

执行结果如下图: 2025-05-24-21-01-24.png

2. 单字段分组

查看 course 表所有数据:

sql
SELECT \* FROM course;

查询结果如下图: 2025-05-24-21-02-11.png

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

sql
 SELECT teacher_id FROM course GROUP BY teacher_id;

查询结果如下图: 2025-05-24-21-02-53.png

根据上面分组结果还可以使用 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;

执行结果如下图: 2025-05-24-21-03-49.png

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;

查询结果如下图: 2025-05-24-21-04-43.png

可以使用 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;

执行结果如下图: 2025-05-24-21-05-31.png

单字段分组和多字段分组的区别

  • 单字段 是以一个字段来判断数据是否重复分组出来的结果
  • 多字段 分组是以多个字段同时来判断是否重复分组出来的结果
最近更新