本帖最后由 myskya 于 2019-12-9 11:28 编辑
# V* m0 P) S9 T% q- ~9 V% S* H问题描述9 _. J1 l. P) Y$ }7 t9 u3 o
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
. o4 m. S$ D% N# X1.数据去重样例样例数据表 quancheng_test & j+ k5 R+ y" a' ]! t/ ^+ m
* V3 l1 f/ w' g
功能需求:按 name 进行去重,把 id 查出来。
5 V8 ~9 V$ N z7 ^8 W B U方案1: - select id from table group by name;
复制代码结果1:
" O1 i. E9 f: X( F6 r* J- f0 s1 G l+ h# ~0 R9 w% n6 V
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: - [& o; R2 |" H7 U
4 n6 z; X0 D2 j- r5 _
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
9 a! ?! K1 B% a% j$ B对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
4 B- z; @7 J! i# C% v M& k- E' o' c; L# n: M
distinct 是查询出来以后再把重复的去掉 e% e/ |& j& @8 p
性能上 group 比 distinct 要好很多 / w/ l+ c+ I+ B$ k0 u% B
+ i/ z9 d+ G \: N |