本帖最后由 myskya 于 2019-12-9 11:28 编辑
$ v6 k% M. [1 E9 k# V问题描述, z4 w* s# c; j8 ~' f" K4 N l
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
1 B' X% |9 f5 u, q- ^9 d8 G1.数据去重样例样例数据表 quancheng_test $ a% [5 o. C* m% z8 H
8 Q8 [& `" L7 c2 Q T
功能需求:按 name 进行去重,把 id 查出来。- w2 v8 H. Z& x+ E! `9 V7 n
方案1: - select id from table group by name;
复制代码结果1:
, m, g, v, t1 J7 ^" n' s' q$ v( f' }
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 3 D( i: l' T- |7 O
. }6 l8 ]5 T& p9 P2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:* I, n% s. ]3 J \, v0 z8 W* K
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: 3 X# a) d4 C* g
8 p" V2 x0 X& Z# a. @distinct 是查询出来以后再把重复的去掉' c; z" M, n0 X8 \; O- m R: ]
性能上 group 比 distinct 要好很多
( h$ J& k* D/ y3 }( y) l7 u* A& W9 W4 d2 N2 r
|