本帖最后由 myskya 于 2019-12-9 11:28 编辑
, X9 z! h3 |: g K) { r问题描述
4 \ m) [: ]& Y; ]; ?查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。 ; g" {. W: Q, n, d7 ^8 F9 V; c5 q
1.数据去重样例样例数据表 quancheng_test 7 ~ \" |- s" ?: y# X
R% f- Y+ r W) X
功能需求:按 name 进行去重,把 id 查出来。$ d8 A: a9 Y; t2 v0 ]! T
方案1: - select id from table group by name;
复制代码结果1:
$ k" w* z' J9 X }" B2 J0 ^/ U% _7 ~3 K! `2 ?- I: f
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: ' V6 o1 t: s( d: \; ~
* s p! D4 K& |% R2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:. L6 O3 c7 X( X2 W' ~
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
+ Y* f2 {1 J+ h! a% ~, y/ }/ F t2 x* c8 c, N+ L! B0 c
distinct 是查询出来以后再把重复的去掉4 y+ H+ o. b7 S4 R3 z+ X& P
性能上 group 比 distinct 要好很多 8 c/ E3 p5 b9 z- }9 o5 k
/ [+ N, U9 l4 y, |
|