面试官:GROUP BY和DISTINCT有什么区别?
在 MySQL 中,GROUP BY 和 DISTINCT 都是用来处理查询结果中的重复数据,并且在官方的描述文档中也可以看出:在大多数情况下 DISTINCT 是特殊的 GROUP BY,如下图所示:
官方文档地址:https://dev.mysql.com/doc/refman/8.0/en/distinct-optimization.html
但二者还是有一些细微的不同,接下来一起来看。
1.DISTINCT 介绍
用途:DISTINCT 用于从查询结果中去除重复的行,确保返回的结果集中每一行都是唯一的。语法:通常用于 SELECT 语句中,紧跟在 SELECT 关键字之后。例如以下 SQL:复制
SELECT DISTINCT column1, column2 FROM table_name;1.
2.GROUP BY 介绍
用途:GROUP BY 主要用于对结果集按照一个或多个列进行分组,通常与聚合函数(如 COUNT, SUM, AVG, MAX, MIN 等)一起使用,以便对每个组进行统计。语法:GROUP BY 通常跟在 FROM 或 WHERE 子句之后,在 SELECT 语句的末尾部分。例如以下 SQL:复制
SELECT column1, COUNT(*) FROM table_name GROUP BY column1;1.
3.举例说明
(1)使用 DISTINCT
假设有一个表 students,包含以下数据:
id
name
age
1
Alice
20
2
Bob
22
3
Alice
20
使用 DISTINCT 去除重复行:
复制
SELECT DISTINCT name, age FROM students;1.
结果:
name
age
Alice
20
Bob
22
(2)使用 GROUP BY
假设还是上面的表 students,我们想要统计每个学生的数量:
复制
SELECT name, COUNT(*) AS count FROM students GROUP BY name;1.
结果:
name
count
Alice
2
Bob
1
4.主要区别
功能不同:DISTINCT 用于去除重复行,而 GROUP BY 用于对结果集进行分组,通常与聚合函数一起使用。返回结果不同:DISTINCT 返回去重后的结果集,查询结果集中只能包含去重的列信息,有其他列信息会报错;GROUP BY 返回按指定列分组后的结果集,可以展示多列信息,并可以包含聚合函数的计算结果。应用场景不同:DISTINCT 更适合单纯的去重需求,GROUP BY 更适合分组统计需求。性能略有不同:如果去重的字段有索引,那么 GROUP BY 和 DISTINCT 都可以使用索引,此情况它们的性能是相同的;而当去重的字段没有索引时,DISTINCT 的性能就会高于 GROUP BY,因为在 MySQL 8.0 之前,GROUP BY 有一个隐藏的功能会进行默认的排序,这样就会触发 filesort 从而导致查询性能降低。
THE END