本帖最后由 myskya 于 2019-12-9 11:28 编辑
! z! Q& s; r- r2 o9 \6 T, r6 e问题描述
* x% j0 y" A7 m! X# Z: b查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
2 r5 f! g- x0 V, R1.数据去重样例样例数据表 quancheng_test ) g$ C' k% _' `* d) f
) ~$ n& e/ C3 k6 z8 E
功能需求:按 name 进行去重,把 id 查出来。 P! _& c3 I. K g3 o& |& @0 S
方案1: - select id from table group by name;
复制代码结果1:
& l+ Z* N- k3 J4 A8 A2 i2 @ _' [% _5 w0 L f' N& T3 f
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: ( U: W& j& G1 w; _. P. l. l
, l9 o2 P$ ]9 `) X- W2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:' c5 t. K x" r( {. H$ o
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: 5 f4 X7 o7 C# {; _" z7 L
! D0 e& {; l, |! H- [% C
distinct 是查询出来以后再把重复的去掉
9 s4 _% q5 e% s+ t7 b0 K性能上 group 比 distinct 要好很多
& w% l& n3 i c- n# A# ~; n9 I+ I% g& B) b8 E
|