本帖最后由 myskya 于 2019-12-9 11:28 编辑 ' `0 n( R4 O! ]9 M" `- | q0 k
问题描述
; j( v# A8 d. s: q2 q查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 7 B/ e# v2 V) j- {, t
1.数据去重样例样例数据表 quancheng_test # ]+ L4 N2 M+ |+ c [- N. T6 z& H d
: n7 d2 Y- i% Q
功能需求:按 name 进行去重,把 id 查出来。
/ G5 q* { Z# B, g* @( D方案1: - select id from table group by name;
复制代码结果1:
" P9 N$ U- H0 K! o. e9 ?: @4 L0 w! X8 A9 h4 L' N
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
7 b( [) j# S7 ^- O6 R. C
: S1 a }, P! |6 x2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:: \4 H: B/ b! f- [
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: 8 x1 [8 o# T$ ^$ R
8 _- B# g I4 }distinct 是查询出来以后再把重复的去掉
+ m0 |" S {; B3 n) U( f性能上 group 比 distinct 要好很多
2 z$ L1 f" x6 V& Q
5 `; i/ b# F$ \ @+ m& F: ]8 S2 p |