本帖最后由 myskya 于 2019-12-9 11:28 编辑
1 q7 S, z0 D+ k/ F# i问题描述
* s2 ?3 x }* c3 U( [查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 4 V2 ]& I6 K' v- } ?
1.数据去重样例样例数据表 quancheng_test : F+ [$ |; W$ s$ L/ C
9 K- }7 `) e2 Z" S ^( l1 C- s
功能需求:按 name 进行去重,把 id 查出来。
+ u' t- @$ B; B$ _; _0 i0 V1 E方案1: - select id from table group by name;
复制代码结果1: ! O, j! _2 g- p7 T
; S7 x6 I/ }$ f
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
' h; }" _6 d- W6 I: G% A7 Z- a7 J% R
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:; b/ y" u/ B* D' v5 _
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
! l! |# E4 Y; q" Q# m% \* e9 Q
! \# v8 M \0 [- V* u& ~, u6 Ldistinct 是查询出来以后再把重复的去掉9 m& @! j/ V* I$ b$ R( r4 q' d
性能上 group 比 distinct 要好很多
+ _7 [ n& v; ^6 ]! m
; t7 S8 o2 b, |5 `; U; e I1 B' h+ v |