本帖最后由 myskya 于 2019-12-9 11:28 编辑
8 ^4 f! l# w( Q, ~. R- E4 J问题描述2 v" t" n; P5 k" f, \. B/ ~3 }7 L) }
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
8 ~% e$ E+ o5 b6 [% G w1.数据去重样例样例数据表 quancheng_test
- f1 x4 [2 E& j( F _% z* E8 ]7 F9 w5 h6 K2 D5 ]' Z
功能需求:按 name 进行去重,把 id 查出来。1 v' ^+ ~& J& `8 i5 }- i" N
方案1: - select id from table group by name;
复制代码结果1: + _+ L7 B! F) J: D6 y; A
& y0 k, g& |7 Y, r7 z$ l1 s+ n方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
`1 D2 J h* i8 ~; p* G2 m" Z! p) {! q" V
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
: w5 l+ D- x3 w0 x6 b对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: 2 k& Q h* ?3 k! f3 e1 T
# f, w& ?( M% Z: K* r% O
distinct 是查询出来以后再把重复的去掉* D, [8 j9 u$ O2 `, d0 X
性能上 group 比 distinct 要好很多 : O1 v8 B5 L& X! ] B' I
: D# ~% a/ y0 ~& O1 M8 w8 J |