本帖最后由 myskya 于 2019-12-9 11:28 编辑
{1 |2 H- M4 u0 x" f问题描述
. X! U k: ^0 P! f: l" J0 I查询数据经常需要对数据表的某一属性进行去重操作,group by 和 distinct 都有去重功能,但是有区别。
' L! P; l" _4 M; }4 o0 _2 B. z1.数据去重样例样例数据表 quancheng_test 4 \0 i; C0 V, e: B: z
, z) |5 J) H5 |& B* e5 V+ N5 w
功能需求:按 name 进行去重,把 id 查出来。
$ A% c$ e' w! e# `" f方案1: - select id from table group by name;
复制代码结果1: 3 F3 }$ \ _% ?" s7 `: h8 h- ]
/ s/ V1 L, d; o% T- J; U9 I方案2: - select id, count(distinct name) from quancheng_test group by name;
复制代码结果2:
) ^; p% v) g- E" O" \
7 C$ m9 g+ o/ J/ V* v9 G2 X2.两种去重方案的区别group 是按组查询的,是一种聚合查询,很多时候是为了做统计用,例如:
' h4 x0 g0 c3 q$ E- ~+ q2 f6 Z; c/ A对 name 分组,并统计每组 id 的和, - select sum(id), name from quancheng_test group by name;
复制代码查询结果为: . R: n# @6 P8 {5 n" B
- _6 {4 \8 @7 o' U. U3 rdistinct 是查询出来以后再把重复的去掉0 F( \3 B. C% h$ o4 |) w. |
性能上 group 比 distinct 要好很多
1 }5 D: u- b# v- k, ]3 G* x9 G3 R7 }8 ]1 t) ?! Z- p! I4 y
|