问题描述
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
1.数据去重样例
样例数据表 quancheng_test
id | name |
---|---|
1 | a |
2 | b |
3 | c |
4 | d |
5 | a |
6 | b |
功能需求:按 name 进行去重,把 id 查出来。
方案1:
select id from quancheng_test group by name;
结果1:
id |
---|
1 |
2 |
3 |
4 |
方案2:
select id, count(distinct name) from quancheng_test group by name;
结果2:
id | count(distinct name) |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
4 | 1 |
2.两种去重方案的区别
group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
对 name 分组,并统计每组 id 的和,
select sum(id), name from quancheng_test group by name;
查询结果为:
sum(id) | name |
---|---|
6 | a |
8 | b |
3 | c |
4 | d |
distinct 是查询出来以后再把重复的去掉
性能上 group 比 distinct 要好很多