本帖最后由 myskya 于 2019-12-9 11:28 编辑 0 y( A$ M* F7 m" C% ]9 v6 u9 k
问题描述
1 N, {" E8 ^5 | q. L2 e查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
/ n. q6 f$ ]) B4 z& ?% C1.数据去重样例样例数据表 quancheng_test
; v+ T- ^9 ?7 C5 b+ J( _5 D1 p1 E8 S: T a6 n/ u T# O) j3 U
功能需求:按 name 进行去重,把 id 查出来。. F) V5 y7 e0 l
方案1: - select id from table group by name;
复制代码结果1:
5 I- s E' B. g8 l. ]% L' b; y0 v) N" w- A C5 K
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: - H- K% N' y2 t% S
# S5 i: \ B: Q) f1 U! V2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:+ G8 q' R" c% S3 x
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
- |' \7 A4 z8 h% O5 p. E/ ?2 m& X2 e5 d: A! A# G
distinct 是查询出来以后再把重复的去掉
, x5 [; `8 _$ |. N/ ^性能上 group 比 distinct 要好很多 7 i f! ~0 W7 F G, A$ _
1 ~2 o. ~" Q* H, d: z0 S& n
|