本帖最后由 myskya 于 2019-12-9 11:28 编辑
8 j+ V) A9 m# N1 W/ K8 @6 J问题描述( K) y. k! W: H, ]+ a
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
4 w& k; Q V$ y! J5 g! `1.数据去重样例样例数据表 quancheng_test 2 S1 d1 X" v( d
. @8 a2 T3 L/ Z; V# L9 A) \
功能需求:按 name 进行去重,把 id 查出来。2 u7 z, l8 F' ]; |; ~8 }
方案1: - select id from table group by name;
复制代码结果1:
% |4 v/ Q) M" K5 L* m0 o) w; c% }% W# A* Z! l) _: e* L: U5 i
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
* o0 ?8 R [: \% K+ R# @, N* `
" V9 y2 D6 [- B' T# o& h- ]; J; \2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:* C9 x7 P+ f& X. W( x! w
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: J7 K$ C" `* E; S: U
! y( a& ~) d; ]5 O4 Y/ C
distinct 是查询出来以后再把重复的去掉
7 l2 h# X2 M% X5 T4 f" ]% d1 Q性能上 group 比 distinct 要好很多
9 q. y3 }+ i, k; O4 T+ q$ |! @1 u- V& Y u* h2 }( F& m2 ^% Q
|