本帖最后由 myskya 于 2019-12-9 11:28 编辑 $ d! R v8 X1 ~8 L! T8 k _
问题描述- H& Z# j" `% [ f$ V2 w2 g+ a
查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 : \& j# h" U3 A- S
1.数据去重样例样例数据表 quancheng_test
7 P; ?# O, D' L* ^9 R& d. u4 \. W" H# ]! J4 w$ C$ S
功能需求:按 name 进行去重,把 id 查出来。
4 x0 C/ J- B$ _; V* d方案1: - select id from table group by name;
复制代码结果1:
+ | r+ m; t9 @( R3 V5 I7 E& w8 N- ?, \: u6 m
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
! z+ l3 ]" | ^$ v: P
# V* r: S% t8 i* I, m, p2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:, f. G9 l9 G& E! |6 q/ S$ o( q9 K" s
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
( q5 N# B2 D4 Z$ I- e2 F" }- W6 s2 ]7 D+ D* p3 a- ^& L
distinct 是查询出来以后再把重复的去掉
; b2 Q( `9 e6 ]3 M性能上 group 比 distinct 要好很多
+ T/ F/ B0 X! N. F4 o' t, d9 r! L# j
- p9 [. i' A" a/ T# Q: O g2 ^ |