MySQL去重中 distinct 和 group by 的区别

开题: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。

版权声明:本文为weixin_40983094原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。