本帖最后由 myskya 于 2019-12-9 11:28 编辑 2 o+ _2 B: @4 ]$ ~3 H! n- @
问题描述
+ v% [6 }0 h" f' s- f* Q查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
2 k8 \4 l0 w. g1.数据去重样例样例数据表 quancheng_test
1 U) q: y% @5 r5 Z/ z1 J1 N
) U4 T6 B& @6 ~ M功能需求:按 name 进行去重,把 id 查出来。
/ x- ^" ]; K4 {# E方案1: - select id from table group by name;
复制代码结果1:
, E+ o( c) s4 l' I6 n" i3 H3 u; B7 q D8 Q( n
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: $ w% b& E K# k9 H# @6 f! D$ p1 \2 s
" _9 ?$ j9 o. l# D2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:; {' F2 w- |6 Q0 O- g9 h' W
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
# ]* G+ N" L9 }, m) } B! ?
8 j* O# J7 @5 B+ ^8 u' l, @/ p5 udistinct 是查询出来以后再把重复的去掉 d4 M+ J% ?) x2 q+ H: x* `* {& `; z
性能上 group 比 distinct 要好很多
: j5 ~7 x3 F0 p
1 }, i% U& l, N& v |