本帖最后由 myskya 于 2019-12-9 11:28 编辑
}1 c* R1 M, T7 h; G% o2 V$ F; Q$ n问题描述
! `8 I' a+ d1 a9 I5 s4 z. v) P查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 7 m7 y9 T' \) V/ k! ~
1.数据去重样例样例数据表 quancheng_test % t5 G( N3 s! W7 Z8 ^% m
* V1 O" e: N4 f1 @- U+ q; E
功能需求:按 name 进行去重,把 id 查出来。
& h2 h9 d$ U& i3 r2 F方案1: - select id from table group by name;
复制代码结果1: $ n7 M: u: D& ^, k
8 l, J9 h) c2 V) ^+ ^0 j
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
0 H# z( T0 b6 B! U) H! ~/ n2 d& b" g9 ]2 D6 G
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
8 q ]/ E# {1 }: ~' @* [对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
! G* N9 h" m2 J! S6 X
9 \8 a) Y: u# e0 L' s4 Mdistinct 是查询出来以后再把重复的去掉
, L/ J1 C$ C( i# S性能上 group 比 distinct 要好很多 # m0 S6 s0 O' p
9 Y7 |" h5 h8 u3 s) a |