本帖最后由 myskya 于 2019-12-9 11:28 编辑 4 `$ k( t# z% N% i1 B( d+ Z
问题描述( E$ `( f7 K- k7 |" z$ U- f
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 0 N* L- v" B/ T
1.数据去重样例样例数据表 quancheng_test ) M" B, ?& Q/ {% t+ @
; K# m5 l; Q3 V H0 u: T- @5 B
功能需求:按 name 进行去重,把 id 查出来。* C6 g" h1 x% a1 L, F4 e: n3 O3 i+ w1 \
方案1: - select id from table group by name;
复制代码结果1:
1 \3 E' R5 m) c3 _( D( E
4 H3 g5 a( E3 X/ E5 z9 ^% W' c方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: # r) c) k7 o/ o- u+ x7 O/ }
5 l% Y6 ^, U$ t: t+ f2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
. t% u; S' v, g5 O3 g1 [& V对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
: j) J7 F9 U2 h: i7 E, q! c0 F5 D4 C L& ?8 p& @# R* m" y3 | |
distinct 是查询出来以后再把重复的去掉
: B6 \( g9 Y+ G }9 G性能上 group 比 distinct 要好很多
$ b% i. m7 B2 y1 l1 F; I2 s! C! w" R& V- y9 M& V* [
|