20、GROUP BY分组
GROUP BY 分组是对指定一个或多个字段分组,使用分组可以较好地对数据结果分析和处理。
插入测试数据
向 course 表插入测试数据:
INSERT INTO course (course_name,teacher_id) VALUES
('毛概',1),
('线性代数',2),
('政治',3),
('程序设计语言',1),
('离散数学',2),
('编译技术',3),
('嵌入式基础',1),
('单片机原理',2),
('图像处理',3),
('数字信号处理',1),
('专业英语',2),
('网络编程',3);
单字段分组
先查看 course 表所有数据:
SELECT * FROM course;
以表 course 为例,需要查出所有课程教师相关信息,按照 teacher_id 字段分组可去除重复数据:
SELECT teacher_id
FROM course GROUP BY teacher_id;
根据上面分组结果还可以使用 LEFT JOIN 连接查询分组:
SELECT c.teacher_id,t.*
FROM course c LEFT JOIN teacher t ON c.teacher_id=t.id GROUP BY c.teacher_id;
多字段分组
可以使用 GROUP BY 按照 teacher_id、course_id 分组来展示所有教师的所有课程信息:
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;
参考资料:http://www.imooc.com/wiki/mysqllesson/mysqlgroupby.html