本帖最后由 myskya 于 2019-12-9 11:28 编辑
" _" k( e7 R. \( C) U$ u2 }' m6 y问题描述7 W* `/ H& {0 m3 B' v" a# S
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
; R# O7 t+ x8 h8 F1.数据去重样例样例数据表 quancheng_test [. u" ?) a0 K' i. C
0 B9 M) L, j; Q- D& z- }
功能需求:按 name 进行去重,把 id 查出来。
% @3 n' N( O! a0 ^方案1: - select id from table group by name;
复制代码结果1:
9 M( e- \: `" |3 ^9 R( X3 e+ t% l
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
: [8 E& L. P$ u5 U# T% T0 M& `5 v0 Y3 p4 a2 |
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:; v: Z8 V; Z% J% I4 {3 H
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
8 F: x4 J: [5 L' U2 w; u8 d! G
$ H9 @& l, l! jdistinct 是查询出来以后再把重复的去掉8 K: _/ ~! |+ H" J- D6 X6 V n6 m" B
性能上 group 比 distinct 要好很多 $ J0 F7 R+ d0 U5 Y: W
1 Y+ k/ @* T ~" m& v4 c |