本帖最后由 myskya 于 2019-12-9 11:28 编辑
$ t8 x, S; u* q; X1 ]4 t问题描述
0 x% a3 M* V+ H0 z5 h7 k* X查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 `: R V& \( f0 j, O) ^
1.数据去重样例样例数据表 quancheng_test - C1 k& d% U1 l6 N6 t5 m' `6 `
1 w8 H# y! T( p
功能需求:按 name 进行去重,把 id 查出来。
9 b" ]. E0 H/ y9 t. \1 }4 O方案1: - select id from table group by name;
复制代码结果1: 4 k$ S5 ~) g2 S9 x M, @
0 ?: o9 @& x9 v: b. J; H
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: " K) q- H8 A" d9 _) E! q/ U) b9 b
* e* s& O8 K, A4 v2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:1 S8 c( \/ z. Q+ q
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: 7 F' Y$ Q' m9 Q& W
; N& ^0 s+ D- g
distinct 是查询出来以后再把重复的去掉* N' q6 k& m& ?3 v& @1 T. w# g+ b. P* p
性能上 group 比 distinct 要好很多 ! |+ F. G1 ^, y
. f' B5 ~. E6 k# j5 e) I: i( l
|