本帖最后由 myskya 于 2019-12-9 11:28 编辑
; T! R+ T8 [1 H0 e* `问题描述! e$ d! b' @4 l- `. L* I
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 2 Q* B# {/ ?' T
1.数据去重样例样例数据表 quancheng_test
' R. f6 Q; \$ _& {$ [. r, ]
; f! i( ~. N- N* \- q6 V功能需求:按 name 进行去重,把 id 查出来。
! }1 c/ s$ v, P+ ~" v5 p1 |方案1: - select id from table group by name;
复制代码结果1: % o1 P! t, U) r: } k
: |5 i1 q4 }2 p8 S R5 V. d
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: ! ]9 R: a0 m: }+ G) T: K' c
# a7 s* t d; I y2 Z& P ^
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
. ?) O% x" ?* G, l1 E% b+ Y对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: & A3 r5 c; k8 T" z5 v. P
* `# [4 f+ Y4 B* y: N
distinct 是查询出来以后再把重复的去掉: L+ H0 V f' u* K* U E
性能上 group 比 distinct 要好很多
" W6 c0 b. y# e, H7 r7 K
5 q" e* T$ O, d0 n" H |