本帖最后由 myskya 于 2019-12-9 11:28 编辑
- q/ C& N1 e! f3 q t问题描述
9 W9 O4 M$ v+ U' [查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
) `8 ]% x9 U- }+ m- n1.数据去重样例样例数据表 quancheng_test 8 t+ I* k6 i c& O2 R# }- Y7 f& U
; z4 y6 F5 t( ^2 O8 O功能需求:按 name 进行去重,把 id 查出来。; s' `' R) R. G% M# q8 M$ A' k
方案1: - select id from table group by name;
复制代码结果1: 1 i1 S' z2 Q' M4 `# d1 v2 b
- H: M: A K% X, x, X
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 8 O% U7 y |/ A
8 _; O' N. w6 Z6 J K8 t3 j2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:0 Q2 B, f+ Q* f8 r2 W+ J H
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: - F, n% z. x1 D- n
! D) ]7 \2 e% l& r4 p( V, f
distinct 是查询出来以后再把重复的去掉
5 t: J W: M/ a+ E& |7 q# b! F8 C性能上 group 比 distinct 要好很多 0 }, P5 K" V! X- t) s: }& T/ ]
d4 ?- ? u5 q3 s |