DISTINCT 去重
前面小節(jié)介紹了如何使用 GROUP BY 對查詢數據分組,并且 GROUP BY 能起到有效去重作用,本小節(jié)介紹如何使用 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;
執(zhí)行結果如下圖 :
2. 多字段去重
以表 student_course、course、course、teacher 鏈接為例:
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. 小結
本小節(jié)介紹了如何使用 DISTINCT 去重,之前介紹的 GROUP BY 也能起到去重的作用,使用的頻率相對較高,它的目的是用來分組進行聚合統(tǒng)計的,例如需要對分組的數據統(tǒng)計:
SELECT teacher_id,count(*) FROM course GROUP BY teacher_id;
執(zhí)行結果如下圖:
Tips:如上圖所示,count(*) 表示使用聚合函數對分組數據統(tǒng)計,這里可以理解為分組重復的總數,例如 teacher_id=1 的總共有 5 條。