本帖最后由 myskya 于 2019-12-9 11:28 编辑 - U4 V- A4 C& i5 p9 M8 Q% p- z
问题描述' A! m! N0 N+ t4 m- A
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
7 z: t( u( {1 k1.数据去重样例样例数据表 quancheng_test 8 T/ i) N9 q3 j. }# K
, V7 @* p4 ~5 @ L% S
功能需求:按 name 进行去重,把 id 查出来。
: j& c9 n! X3 A方案1: - select id from table group by name;
复制代码结果1: & R% k; G. n3 S2 W0 J1 R% W& O
/ u9 u4 n. ^' h0 B方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
, b _- \/ N/ R/ ^5 h( q# v' a3 {5 q3 u* }0 _/ e8 u' D$ i* f
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
" t+ q, m) H2 O+ Z9 V( T6 p* P对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: ( P2 g6 ^, t/ Q+ c9 a- b5 F
% d7 q+ N' n" \distinct 是查询出来以后再把重复的去掉0 d. ^' L+ \: H$ L' I& M3 T
性能上 group 比 distinct 要好很多 2 J: M" O: x$ n+ C% J
( ^5 p. p" t/ c! n* d1 `
|