本帖最后由 myskya 于 2019-12-9 11:28 编辑 : E3 M, S/ j+ b8 _& h
问题描述
4 y4 ?5 Y2 x2 d, j7 N0 n3 t& b查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
/ J! i4 s+ O1 i. q. k% \1.数据去重样例样例数据表 quancheng_test
( d# G" k4 E; z+ A( h( b0 ~7 g; l+ ~* s* u/ a
功能需求:按 name 进行去重,把 id 查出来。+ v! w" ? {5 \! N# i, {: L$ a
方案1: - select id from table group by name;
复制代码结果1:
9 m- n& B; j% e6 I
9 ]3 e; w: X! |$ |1 d4 K8 Q$ A; T6 ^方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 4 d& ?9 P& i! r) \1 O4 C. ^- E0 n
! U) v( \: K; I* E; }2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:# F. N5 Z; S1 i. H, I
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: 0 K& {' J6 D" J
; p7 V& F( ~ e. Y0 N5 j P
distinct 是查询出来以后再把重复的去掉
/ @9 X. \/ f2 h, i1 A d0 e) E性能上 group 比 distinct 要好很多
" f: M" ^8 K7 d
* V5 X' Z0 e; w/ h |