本帖最后由 myskya 于 2019-12-9 11:28 编辑 & c9 Q3 g1 S7 `# g
问题描述/ l- m* z! d5 f# K J5 X
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 ( S. X% l R: j* k' l' d
1.数据去重样例样例数据表 quancheng_test
: ^+ U) V( @: a% m7 F
! v/ N* Y- I% T% P6 Z( \+ C功能需求:按 name 进行去重,把 id 查出来。
2 Z/ x' Q1 a- S7 j- c7 s c# O方案1: - select id from table group by name;
复制代码结果1:
( [- H4 q+ F2 y' R4 R/ f7 T* B' i7 O+ ^" p: Z8 H
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 6 _1 P; B" {" ^
# Z' } u3 z9 G1 ^
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:% Y& b. ?1 o8 N' A1 V( _8 E0 C
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: + v' B- q y* s% R* D D4 s% X% }+ q, g
4 O% M1 x6 d5 W% x K7 E% }+ p6 Kdistinct 是查询出来以后再把重复的去掉
; d+ G/ a& F7 x Y性能上 group 比 distinct 要好很多
7 [/ x9 _, [8 v! z. h- i! k8 d9 F- F9 s( y* M* _
|