本帖最后由 myskya 于 2019-12-9 11:28 编辑
1 v. r/ `7 j, n1 Y0 V问题描述
% r, m6 i9 c* \ @查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
) C: \5 [, N4 w" |1.数据去重样例样例数据表 quancheng_test 6 ?' @5 u3 |. V2 R ]5 M
5 P) Q+ J: y! r1 H4 G$ U5 X功能需求:按 name 进行去重,把 id 查出来。
! x, J9 h8 J+ _5 ~6 P1 L( {方案1: - select id from table group by name;
复制代码结果1:
* |7 d4 D! N5 ~# f
7 K! H* C: G: n方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
, Z! ^6 |9 b4 C% [( h4 T* ?* o
2 \- c- O/ v' Q7 ?) M! k) B+ E5 c9 e2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
" m5 K+ x& N& Z. a对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: " X4 L( i5 y1 W5 Z6 ~) E
6 c: [' p7 R6 J, z. y/ @2 ]
distinct 是查询出来以后再把重复的去掉
8 e9 e' a0 t, [' ^% X性能上 group 比 distinct 要好很多
- `' |3 s+ ]7 d/ k2 V8 C; z
/ }' M0 m' S. \! r5 i9 f; `) i |