本帖最后由 myskya 于 2019-12-9 11:28 编辑
) R( o; i2 z' e$ Y2 i4 h/ m问题描述
* X4 T7 \8 N8 t2 \+ ^. J查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
5 B# y$ H9 q, t# m# }1.数据去重样例样例数据表 quancheng_test
4 c1 S& F7 Q: D. t, s" E1 |
% }* k m" \5 |5 j Y! U1 I功能需求:按 name 进行去重,把 id 查出来。
3 ?8 i- X1 U( u) r! Q) C6 F8 i" E方案1: - select id from table group by name;
复制代码结果1: $ Y$ j' C; y' p2 z0 ]1 H9 g6 O7 Z
& P; z' b% b- n* D* w# l, y8 Z
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: / a6 r: {/ i0 t5 v& j l/ J+ Z" V
7 z! a: H+ Y1 ~ a4 i; @+ d0 \
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
" H& v0 G/ M) {3 k3 Y对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
+ h, c- S: @$ d8 |! T' U( Q9 p. S3 V5 t$ v; O
distinct 是查询出来以后再把重复的去掉6 q1 Y& n- M) F
性能上 group 比 distinct 要好很多 ) r8 U- U. P; [2 N1 `
* }4 y# i0 ?, S8 `% t+ T1 F. f
|