本帖最后由 myskya 于 2019-12-9 11:28 编辑
' R" G$ w6 W* g6 U8 W, s9 p$ x问题描述* m- p! S6 u3 B- z8 ?4 L5 [2 J
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
0 t6 E( `3 ?0 f& _6 G6 M1.数据去重样例样例数据表 quancheng_test 5 J( u! n4 r; y ^) Z ~* M
2 V" T# U4 L* x, f& d$ E功能需求:按 name 进行去重,把 id 查出来。6 V* }! [4 z0 W; u* H$ U ^* p
方案1: - select id from table group by name;
复制代码结果1:
; d( v3 N* O* z- |4 J! }
' [8 `6 p" I/ e! ~5 M+ g方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
/ D+ q3 g/ C8 i3 |
3 Z% d: T1 d+ g4 v* T2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:: |' {) e2 R* `2 f U: i
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: . u5 L) O% ^* `8 t/ O% m
+ D1 v) g( P6 i3 x& M0 C& o2 Y
distinct 是查询出来以后再把重复的去掉
; X) O( V8 j8 m% E! m1 G. ^性能上 group 比 distinct 要好很多
7 ^: f& O* g8 f9 d1 k% o- V
7 n' ] u/ G+ D$ @- t2 P6 F |