1. 程式人生 > 其它 >MySQL去重中 distinct 和 group by 的區別

MySQL去重中 distinct 和 group by 的區別

技術標籤:資料庫mysql資料庫sql

開題: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。