本帖最后由 myskya 于 2019-12-9 11:28 编辑
r0 S6 m. R- z' ^; y问题描述
6 ^/ ^( u9 z9 {0 q( @# f查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 7 l1 a/ s6 w8 N# U
1.数据去重样例样例数据表 quancheng_test ?$ U$ a3 Y# Q$ m$ y
5 o" G) y9 b7 B: n0 e% _; o
功能需求:按 name 进行去重,把 id 查出来。
% `! D& e" H7 n8 Q- N) F4 `5 J方案1: - select id from table group by name;
复制代码结果1: $ E/ S! S4 h2 ]# N3 q$ {
, D* M9 t( S' ^7 J' X
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: : [) ~0 w4 d7 A
) @. K9 t% V8 J6 L5 L
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:. W9 |. W3 o2 R4 W. w& a6 u& x
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
6 V: p( }9 O2 {3 f9 |2 u
% V- _; L3 j6 R2 A3 r1 Zdistinct 是查询出来以后再把重复的去掉
/ G' p6 R2 n: R性能上 group 比 distinct 要好很多 ; e+ f3 x f- O
0 A6 z! o' [5 C/ W |