本帖最后由 myskya 于 2019-12-9 11:28 编辑 % n) f: i2 n2 f
问题描述2 x+ \! m# B/ b; J
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 # ?6 P$ V" X( z( Z: B
1.数据去重样例样例数据表 quancheng_test ) e3 F& S/ C" ]5 l' U
+ \! ~( c0 Z' S4 D- F8 K功能需求:按 name 进行去重,把 id 查出来。. F$ x( v( q- q3 L) q: E4 j
方案1: - select id from table group by name;
复制代码结果1:
8 K) a8 O" `0 r' E- T2 m/ Z8 c5 R9 m6 s& ^. s$ A
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
c: T, Q/ U' d( S4 B# ~9 g# q/ O" ]/ Y( h
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:/ P& y) ?) _+ o: f& e! ^
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
4 @" y) E/ i9 |8 O- J. \1 w
! {3 v4 o- v) A0 l5 D6 Qdistinct 是查询出来以后再把重复的去掉8 i! ~7 |$ p( p( u# G/ i
性能上 group 比 distinct 要好很多 4 O% L% j8 }& C: s1 u$ v* f/ c3 ~
, l4 M5 v0 X' I1 h
|