本帖最后由 myskya 于 2019-12-9 11:28 编辑 - ~4 k" V& q) A2 W( P J; k8 V
问题描述
' J$ v. s! F6 F3 o, |% G& n z j查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 & ~5 z% Q; b" W
1.数据去重样例样例数据表 quancheng_test 7 s- u" p0 D# p2 x4 ~
9 h8 R/ \; }& |0 `( @1 x- V功能需求:按 name 进行去重,把 id 查出来。
4 v) h. B9 x. `+ x# j方案1: - select id from table group by name;
复制代码结果1: 9 I( q. e, G: w8 E3 V
/ c9 W9 C$ ?, C* e) S方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: $ l, h3 C% Z. _0 l
: n$ T2 K0 g: @' @2 H
2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:1 A/ @# }2 r9 Q- N. |3 r
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
/ c: O: ?; N2 |, i- ~8 C( \- d T! ~
distinct 是查询出来以后再把重复的去掉6 b. ?1 P9 z) s2 _% K+ r
性能上 group 比 distinct 要好很多 ' h* }, E0 T8 Q' g) Y
/ o' B$ U* c# _( F7 K2 L* C# t: w
|