问题描述
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
一.数据去重样例
样例数据表 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;
id 1 2 3 4 - 方案2:
结果select id, count(distinct name) from quancheng_test group by name;
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 要好很多