本帖最后由 myskya 于 2019-12-9 11:28 编辑
- W$ D G% u! j% ~$ h; s: F: V问题描述" k8 C1 v- D8 @- {1 D: l
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 ( \1 p9 X: `! K
1.数据去重样例样例数据表 quancheng_test
. p5 i- s0 u8 r2 @) e1 ?
) o& X" a) h ]5 x% Z功能需求:按 name 进行去重,把 id 查出来。
6 E6 S. E/ e5 S方案1: - select id from table group by name;
复制代码结果1:
7 i# X5 K! {, b% X6 T$ y# h( N
; a7 e6 S. Z. R: ~方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: * j9 M8 d5 w; x* r
7 U# B' k; A& S2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:2 Q& ]: S7 C& Q& N/ Z
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
3 p- g% ` [( ^9 w# }3 R. a+ F- S; A! |
distinct 是查询出来以后再把重复的去掉/ m8 a3 U/ Y+ }: `/ G4 ?1 B% J
性能上 group 比 distinct 要好很多 ' ~* d1 `: c+ e5 ^. ]4 M, m
, X* l3 ^ K4 ?7 b( u1 W3 L+ y A |