本帖最后由 myskya 于 2019-12-9 11:28 编辑
; R+ v( d. o. M6 T% B: @1 ?9 Q问题描述- ?% |# t5 k" y: b5 b% k2 s- B
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 : f% v$ ?. V% g. k
1.数据去重样例样例数据表 quancheng_test 6 _, U3 a$ Z. z5 j9 {( o
! ?" V( B7 [3 h2 Z功能需求:按 name 进行去重,把 id 查出来。0 e/ U# u' A8 z( n6 s5 @
方案1: - select id from table group by name;
复制代码结果1: 8 x! H$ {" V0 _) y' X2 v1 h; n
- H% j/ |, b' e方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 6 X# O3 K: R; @! w/ J
/ o: s) `5 O9 e) g- x2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:( u/ k; b0 h# q W% [
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
3 s) s: g( E: l) Q& j; B! L, p$ ^. N9 S8 y5 Q* S6 T F
distinct 是查询出来以后再把重复的去掉, Q1 h7 j: u$ }8 n
性能上 group 比 distinct 要好很多 6 Y8 Y; y7 H9 q- q3 b
" u. H$ F. V9 s3 B. {/ o5 M |