本帖最后由 myskya 于 2019-12-9 11:28 编辑 / J) I* u9 @: J, P `
问题描述5 F d5 ? P) V
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 ! c& t1 l6 p) J! D2 w3 S
1.数据去重样例样例数据表 quancheng_test 0 Z9 l; X( j5 B6 o. Q
* F O w. v9 `) G" ^
功能需求:按 name 进行去重,把 id 查出来。
/ N: Q; m" }( ~0 \方案1: - select id from table group by name;
复制代码结果1:
" P) w* L4 Y/ I, X; {3 X9 J. |' t/ p* g& K5 ^! W
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
0 n! }) a2 T; L7 J* a- m. [: @# P8 O: l( c$ ]5 B
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:0 R2 d: x2 t+ p* n) s
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
! P$ S" @0 {: {5 R* t* P
' K$ N5 K4 I4 u5 qdistinct 是查询出来以后再把重复的去掉' H0 `* e+ P) w$ b
性能上 group 比 distinct 要好很多 / F5 b* }' n- r
/ \& H7 Y d6 y$ Z0 j- f |