本帖最后由 myskya 于 2019-12-9 11:28 编辑 * ]( G& d/ T6 T* x5 H
问题描述# G5 S" Y% w: Z; i7 i1 H
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
, U" L3 X+ H7 N. V, T2 `0 q3 [: R1.数据去重样例样例数据表 quancheng_test ( d: H% S! n4 s, T& i) s
7 i1 e; X' a0 j
功能需求:按 name 进行去重,把 id 查出来。 A! ~3 v0 E8 R. K" D
方案1: - select id from table group by name;
复制代码结果1: ! [0 p6 d7 A( P+ s) V# K7 a( m) F- q
+ |- k6 u M9 W
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 8 y/ w' f6 B! x. E
# ~6 h3 M# k- X' d. R8 i6 e2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
$ s2 S" f5 X% ~9 ~. C f对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: & I4 W0 X% F9 v C5 \. {
) ?8 e* K1 D2 a5 g9 Z) t7 [distinct 是查询出来以后再把重复的去掉* o4 R+ B: z) p5 t& T! o4 T2 G2 d0 b
性能上 group 比 distinct 要好很多
/ U& T3 X* t5 M& s$ q9 ^
7 @0 y; I$ K2 O |