本帖最后由 myskya 于 2019-12-9 11:28 编辑 ; o7 O b+ n0 g! J |$ m* U; P: D& K
问题描述7 w! a2 j, Z# H* ~0 H
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 ( z7 |. [# Q) l- W, E+ q
1.数据去重样例样例数据表 quancheng_test
6 o3 U; } \5 g' u+ o$ n
+ [9 s$ w# M" ]! R3 x# N功能需求:按 name 进行去重,把 id 查出来。 F6 L$ i2 | r( k/ {
方案1: - select id from table group by name;
复制代码结果1: # g6 X' N& R) n
/ {/ `+ Y* I3 R7 w
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 5 @: H/ S( S0 o- D7 J) O! l
4 k! l' E! y; @* _; @; @! T
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
; q7 L: l. n8 D# A# F对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: B- X: U2 n3 Y2 h+ m* b+ w
2 n0 n/ t+ i4 P! p0 u( {distinct 是查询出来以后再把重复的去掉) P N* L. j9 K1 d
性能上 group 比 distinct 要好很多 - n* g$ F& t% ~! a$ o9 E, v |
1 G, q: [$ \/ J" i' M |