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