本帖最后由 myskya 于 2019-12-9 11:28 编辑 7 r/ K6 W$ R2 k- |1 d6 A& Y5 n
问题描述& _1 `" d# K( Z4 k7 S5 C' Q
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
; T! c( j; |; Z6 f! M& ?1.数据去重样例样例数据表 quancheng_test
# Y0 V$ \+ @# o- C+ ] p: y/ y m$ v" z4 {7 w5 d! s
功能需求:按 name 进行去重,把 id 查出来。
/ |) @4 F8 r& a& X方案1: - select id from table group by name;
复制代码结果1: 9 m/ v B/ F" l& l F! e
% G7 g& Q/ d$ ]; [$ ~! `5 I0 R
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
/ n. M' @( w" u, f1 `- t' e$ b8 O2 I9 r* S# f3 E. l7 l
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:* r' k/ l9 \/ l d# A
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: . P+ A" D/ v5 |6 J& L0 A! K) \
% H) q1 V5 \. P! d Hdistinct 是查询出来以后再把重复的去掉
! }' i: C% V, X w6 `性能上 group 比 distinct 要好很多 6 Q ~; x! X: |
w- [! Z! M% l |