本帖最后由 myskya 于 2019-12-9 11:28 编辑 2 f( R( C, @( x7 B1 D
问题描述
9 ?+ V8 m4 M6 Z) w查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 ) m: |6 B/ N% a
1.数据去重样例样例数据表 quancheng_test : G- A/ E% l- p4 U- w5 y
. e! o# C* @1 I- c d% x9 g' e功能需求:按 name 进行去重,把 id 查出来。/ e$ v3 v; A1 C
方案1: - select id from table group by name;
复制代码结果1: 4 H! {& Q2 n) J- f* a0 u
1 J2 y+ u) x' ] T: s' T0 F n
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
9 l3 o7 {5 K' W. J8 U& Y% J/ q) F0 W& Z; }1 ^8 h. K
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:2 R+ @, u0 }. f8 q) b; z: j9 U
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
- c8 J4 w8 V+ F: O8 }; w2 _/ G
+ f, Q9 Q& p/ f/ E: u+ \4 H6 C6 _distinct 是查询出来以后再把重复的去掉- t- {0 K0 f. V9 e. X: l
性能上 group 比 distinct 要好很多
# r6 r- j5 @* v4 c d5 O7 A
, N5 y- k, O+ N+ P |