本帖最后由 myskya 于 2019-12-9 11:28 编辑 " {& ]* `6 {1 m! {3 v F
问题描述
% f# q" v g, K2 P8 o. O a查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
3 C' c5 Z8 I5 \+ W! j& Z1.数据去重样例样例数据表 quancheng_test
; S; w; F% @( L! P% c
. j. E( r2 [: Y7 P6 o功能需求:按 name 进行去重,把 id 查出来。
/ H7 ~' S7 X5 w6 x方案1: - select id from table group by name;
复制代码结果1: ; u( z: S$ S1 E& ?
- f% e* o/ N8 H9 V/ Z1 J: b3 c* V
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: " c# ^% y8 E6 R9 H: S+ a! M
" V: l7 D4 a- ^1 l+ E* c6 ^) I2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:. O$ C6 t6 o7 L- R5 f
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
& V; x* ?3 k1 v8 T! S( K
2 X2 B- ^) G9 `* @. P6 udistinct 是查询出来以后再把重复的去掉' B9 k' z3 r3 ^- j, Z) K! @2 `9 |
性能上 group 比 distinct 要好很多
0 t; w3 B# N# ~ j: C( u
5 u( S- c4 x% i# u |