本帖最后由 myskya 于 2019-12-9 11:28 编辑
/ q' q% v2 W( c$ u% g' S问题描述6 o) R% s1 y! x( {* k# |. C
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
0 x U7 R5 l1 Z: B! ^- W( z1.数据去重样例样例数据表 quancheng_test
) `' w% q% W& c; C \/ f# e: C5 x: l
' ~( K8 O0 @% B% q功能需求:按 name 进行去重,把 id 查出来。) I. @4 {7 _9 q1 k* ~; _
方案1: - select id from table group by name;
复制代码结果1: 6 m# w/ m5 @3 ^6 M9 D( Q) T3 D
& R' f8 A. Q1 i3 c方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: + o5 K7 n2 {& b. t3 Q
7 }2 R x i ]2 g: S* \
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:. n: Y. g" n! {. n+ ` y; S
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
6 I# K+ ^2 n- T9 {+ G0 n4 M6 W" v
4 }, d2 A7 W1 b9 g( Adistinct 是查询出来以后再把重复的去掉 y/ E* J Q- p0 O% B; k
性能上 group 比 distinct 要好很多 4 p' n" N- Q$ V
0 h, V0 {, v2 Q/ q1 W- v) K& V! A |