本帖最后由 myskya 于 2019-12-9 11:28 编辑 1 L& O5 }9 C( N, y2 W
问题描述* V: i7 m" T: w$ e1 P
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
; q# U3 p; R5 N3 X1.数据去重样例样例数据表 quancheng_test , r5 _% K+ m# b7 w, b) H) _( M
+ {# Y2 q; ^( q1 S q2 B, b4 G功能需求:按 name 进行去重,把 id 查出来。
* V9 K6 L3 J/ i, H' W方案1: - select id from table group by name;
复制代码结果1: 8 I) x6 U, N5 w2 N
& Z4 R2 h: e) _6 F, ~3 l
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
% M9 s3 ^- _5 m- `; P% X/ c9 e {4 F- I8 N
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
& ^! D2 }& ?5 x1 B0 N对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
5 g) [: a7 e0 @" o' J2 _6 @. w: h O4 N( ?
distinct 是查询出来以后再把重复的去掉; `$ m/ @, [/ G* L
性能上 group 比 distinct 要好很多 ' ?; b: h9 H( p) _
" R, F2 W! z6 E* C |