本帖最后由 myskya 于 2019-12-9 11:28 编辑 . F0 C7 F. H: w0 R, I% n# p1 g; L
问题描述
9 R9 c5 k9 i$ L1 }7 g. {5 o ^查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 + z1 }) l1 F+ Y" p# ^, n
1.数据去重样例样例数据表 quancheng_test
/ {# g$ a) S0 Z( h" D: Y
9 ]9 d8 Q9 r1 `% X2 ~5 E功能需求:按 name 进行去重,把 id 查出来。 E0 _9 @9 g3 x- y
方案1: - select id from table group by name;
复制代码结果1:
1 }1 p- V# u# I+ W; i& W& }1 s
4 N5 s( b; E, Y# J( q" S, J方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
& `' l' F. |7 I! b- T& _, [# M
" j$ D$ [1 @5 G* {, l2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:* }; E2 H- c8 B& H1 \
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
/ g+ U% c3 d2 Z' m" v) l5 w6 q) a
: y9 b' u1 j7 f: D' u* s' ]distinct 是查询出来以后再把重复的去掉
- d$ O ?, D( o- w性能上 group 比 distinct 要好很多
) H+ `* Y, W g, j8 Q' \$ |
6 t: S5 y* g* L0 V& n, { |