本帖最后由 myskya 于 2019-12-9 11:28 编辑 1 w* J6 x, T$ F2 N: q
问题描述
- w$ u8 t) O$ w. P6 G查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
( c. D9 v7 a/ z* `0 u1 t- j6 V1.数据去重样例样例数据表 quancheng_test 3 h4 Z% T* | o( Q. r( j! g A
6 q! I0 M$ d8 y/ j- u% N( @' \- q功能需求:按 name 进行去重,把 id 查出来。
5 [ s7 L/ `4 v; i: M0 Y方案1: - select id from table group by name;
复制代码结果1: 7 \, w* Z9 m3 V
1 X6 ~4 |( U# z1 P- b, d
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 5 L8 ]8 [" S: z% H0 s2 K2 H
% e. X, c) j+ I6 x6 V2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
1 h8 A- k) h _4 `4 F对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
3 d3 j- u5 _; S$ i' y5 Y3 b! v. n/ L5 w d
distinct 是查询出来以后再把重复的去掉
. i& O( V5 y. ]( P性能上 group 比 distinct 要好很多 / j' t0 t+ u; O, w+ U
2 N( ] Q" J2 w% J6 F+ r) y, |9 ^
|