本帖最后由 myskya 于 2019-12-9 11:28 编辑 - @: n$ F1 f) m
问题描述. }! o8 L* ~1 m' W+ O
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 : T* A0 h7 Y6 d$ C5 H, q
1.数据去重样例样例数据表 quancheng_test 5 d9 v. h8 X3 S; d( [/ d
7 x1 w4 o) D- ?2 c( E# _
功能需求:按 name 进行去重,把 id 查出来。
: V2 c5 Z$ G& m7 @& U方案1: - select id from table group by name;
复制代码结果1: 1 B2 Q3 M* b( F. k* T
$ V7 t. U$ L/ t" o方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
8 U7 A# s x. e2 f! n3 C$ a- `+ K* i* T( k. M# S
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
4 v3 Y" H0 c0 @# Z对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: % E$ \, {# R9 i/ m' w, v
( I6 ]1 ~9 J# k C% {* ]3 M9 p
distinct 是查询出来以后再把重复的去掉
7 T9 \- L! J& p! J, W' \; T性能上 group 比 distinct 要好很多 - j" D4 }- C* b, g( Z9 j
3 Q$ C6 c. ~1 i9 w" v
|