本帖最后由 myskya 于 2019-12-9 11:28 编辑
# R5 j+ j) e8 s) d" c: H0 ]# w问题描述4 k% N! c* B, O$ B
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
) O) ?& U! I% U0 a- j( z1 E4 [1.数据去重样例样例数据表 quancheng_test
: L' ?. K; f9 m) f" Q7 r% F, }8 {+ ` J+ G" V6 p3 X% g( n
功能需求:按 name 进行去重,把 id 查出来。
) t; k9 h1 {3 g X; _- D方案1: - select id from table group by name;
复制代码结果1: , S3 E' U) [7 }; x* t
% {7 t3 ?: Z" X$ s6 Y; W方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 1 o5 i2 B2 ~ I9 c" L& e
: l' J& g) R. x5 c
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:9 a, q8 ~9 }! S; e r7 a' m0 i$ O
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
" W a' H( ^/ F( Q6 D
! r. ?. A g, R/ D" Zdistinct 是查询出来以后再把重复的去掉' z& d2 j- d3 Y
性能上 group 比 distinct 要好很多
7 V+ T. i2 V6 T) P4 n, B
0 s' W% m( I) Z& c3 P9 ?5 A |