第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

GROUP BY分組

本小節(jié)介紹如何對查詢結(jié)果使用 GROUP BY 分組,GROUP BY 分組是對指定一個或多個字段分組,使用分組可以較好地對數(shù)據(jù)結(jié)果分析和處理。

1. 插入測試數(shù)據(jù)

為了后面演示方便,這里向 course 表插入測試數(shù)據(jù):

INSERT INTO course (course_name,teacher_id) VALUES
('毛概',1),
('線性代數(shù)',2),
('政治',3),
('程序設(shè)計語言',1)('離散數(shù)學(xué)',2),
('編譯技術(shù)',3),
('嵌入式基礎(chǔ)',1),
('單片機原理',2),
('圖像處理',3),
('數(shù)字信號處理',1),
('專業(yè)英語',2),
('網(wǎng)絡(luò)編程',3);

執(zhí)行結(jié)果如下圖:

圖片描述

2. 單字段分組

先查看 course 表所有數(shù)據(jù):

SELECT * FROM course;

查詢結(jié)果如下圖:

圖片描述

以表 course 為例,需要查出所有課程教師相關(guān)信息,按照 teacher_id 字段分組可去除重復(fù)數(shù)據(jù):

 SELECT teacher_id FROM course GROUP BY teacher_id;

查詢結(jié)果如下圖:

圖片描述

根據(jù)上面分組結(jié)果還可以使用 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;

執(zhí)行結(jié)果如下圖:

圖片描述

3. 多字段分組

以查詢學(xué)生選課關(guān)聯(lián)表為例,查詢學(xué)生選課相關(guān)信息:

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;

查詢結(jié)果如下圖;

圖片描述

上圖是不同學(xué)生選課相關(guān)的信息數(shù)據(jù),可以使用 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;

執(zhí)行結(jié)果如下圖:

圖片描述

Tips:單字段分組和多字段分組的區(qū)別在于,單字段是以一個字段來判斷數(shù)據(jù)是否重復(fù)分組出來的結(jié)果,多字段分組是以多個字段同時來判斷是否重復(fù)分組出來的結(jié)果。

4. 小結(jié)

本小節(jié)介紹了如何使用 GROUP BY 對查詢結(jié)果集分組篩選出想要的內(nèi)容,相對于前面小節(jié)的內(nèi)容來說,本小節(jié) GROUP BY 分組較為復(fù)雜,需要仔細的體會和思考,需要注意的是使用 GROUP BY 分組時,要將 MySQL 的 sql model 配置中 ONLY_FULL_GROUP_BY 的值去除掉,如果有該 sql_model 配置,在 SELECT 中的列,沒有在 GROUP BY 中出現(xiàn),那么這個 SQL 是不合法的,這樣的嚴格模式對新手不友好,需要去除該配置,查看當(dāng)前 sql_model 配置命令:

SELECT @@sql_mode;

執(zhí)行結(jié)果如下圖:

圖片描述

上圖中 sql_model 中并沒有 ONLY_FULL_GROUP_BY 配置值,若想要配置 sql_mode 則可以在 MySQL 配置文件中 [mysqld] 下面增加 sql_model,設(shè)置好之后,重啟 MySQL 即可,內(nèi)容如下格式:

sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'