MySQL去重中 distinct 和 group by 的區別
阿新 • • 發佈:2021-01-07
開題:SQL中的 group by 和 distinct 瞭解嗎,簡單介紹一下?
- group by 是按照指定的規則對資料進行分組,所謂的分組就是將一個數據劃分成若干個組,然後針對若干個組進行資料處理。
- distinct 是一個關鍵字,常用於select之後,用於取出去重之後的值。
所以,group by 和 distinct 都可以用於去重。那有什麼區別呢?
測試資料:
CREATE TABLE student ( stu_no VARCHAR(40) NOT NULL, name VARCHAR(100) NOT NULL ); insert into student values('1001','name1'); insert into student values('1002','name2'); insert into student values('1003','name1'); insert into student values('1004','name2'); insert into student values('1001','name1');
1.僅對name欄位去重
select distinct name from student
2.對stu_no,name兩個欄位去重
select distinct stu_no,name from student
對比圖1,2發現,只有兩個欄位完全一樣的資料被去掉,其他只有一個欄位重複的資料並沒有變化,因此得出結論:
distinct主要是針對全部欄位去重,即去掉完全一樣的資料。
3.要想每個欄位只保留同一個值,即針對單欄位去重,可以採用group by聚合去重,
select stu_no,name from student group by name
總結:
- distinct和group by都可以用來去重,
- 不同之處,distinct針對全部欄位去重,而group by可以針對全部欄位中的單一欄位去重。
- 兩者執行方式不同,distinct主要是對資料兩兩進行比較,需要遍歷整個表。group by分組類似先建立索引再查索引,當資料量較大時,group by速度要優於distinct。