本帖最后由 myskya 于 2019-12-9 11:28 编辑
3 c9 C/ J, f: E0 m b问题描述
' x6 Q$ j) Z$ `- j! [查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
0 e( {; Z5 h, Y( S7 u1.数据去重样例样例数据表 quancheng_test
& g5 K# d" W0 U: f/ n$ ^' m5 W9 V8 `8 u. A3 c( N+ h+ A
功能需求:按 name 进行去重,把 id 查出来。- s5 x% ~) m9 u# K2 o! I7 g
方案1: - select id from table group by name;
复制代码结果1:
' M* t0 c# P; Y) |4 B1 z6 ^$ E. v( l4 e9 k# ]
方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2: 2 B- S8 e$ a O! k! i
* d' c8 z) J% w q* d2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:5 b7 o) V9 H" [+ Q8 C5 U
对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为:
7 k" s% G, K! D; l) r/ }" p6 A+ J6 f
distinct 是查询出来以后再把重复的去掉
! G5 k7 l, x" c5 y/ ]1 m1 e* T/ f3 }性能上 group 比 distinct 要好很多
2 i [: s! F! j2 g
& [8 ]+ G7 o- Z |