1. 程式人生 > Mysql入門教學 >25 DISTINCT 去重

25 DISTINCT 去重

前面小節介紹瞭如何使用 GROUP BY 對查詢資料分組,並且 GROUP BY 能起到有效去重作用,本小節介紹如何使用 DISTINCT 去重。

1. 單欄位去重

以表 student_course 和 表 student 連結為例:

SELECT * FROM student_course a INNER JOIN student b ON a.student_id=b.id;

查詢結果如下圖:

圖片描述

上圖查詢結果中,若只需要學生資訊,則需要對結果進行去重:

SELECT DISTINCT student_id 
FROM 
student_course a 
INNER JOIN 
student b
ON a.student_id=b.id;

執行結果如下圖 :

圖片描述

2. 多欄位去重

以表 student_coursecoursecourseteacher 連結為例:

SELECT * 
FROM 
student_course a 
INNER JOIN 
course b 
ON a.course_id=b.id 
INNER JOIN teacher c 
ON b.teacher_id=c.id;

查詢結果如下圖:

圖片描述

如上圖,若需要得到所有教師的所有課程資訊,則需要多個欄位對結果去重:

SELECT 
DISTINCT  a.course_id,b.course_name,
b.teacher_id,c.name FROM student_course a INNER JOIN course b ON a.course_id=b.id INNER JOIN teacher c ON b.teacher_id=c.id;

去重後查詢結果如下圖 :

圖片描述

Tips:多欄位去重意思就是隻有所有指定的列資訊都相同,才會被認定為重複的資訊。

3. 小結

本小節介紹瞭如何使用 DISTINCT 去重,之前介紹的 GROUP BY 也能起到去重的作用,使用的頻率相對較高,它的目的是用來分組進行聚合統計的,例如需要對分組的資料統計:

 SELECT teacher_id,
count(*) FROM course GROUP BY teacher_id;

執行結果如下圖:

圖片描述

Tips:如上圖所示,count(*) 表示使用聚合函式對分組資料統計,這裡可以理解為分組重複的總數,例如 teacher_id=1 的總共有 5 條。