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。
  • 14
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值