DISTINCT 关键字
DISTINCT
用于返回唯一不同的值,消除结果集中的重复行。
SELECT DISTINCT column1, column2
FROM table_name;
特点:
-
只用于消除重复行
-
不进行任何聚合计算
-
适用于简单的去重场景
-
性能通常比 GROUP BY 好(对于简单去重)
GROUP BY 子句
GROUP BY
用于根据一个或多个列对结果集进行分组,通常与聚合函数一起使用。
SELECT column1, COUNT(column2), AVG(column3)
FROM table_name
GROUP BY column1;
特点:
-
用于分组并可以配合聚合函数(COUNT, SUM, AVG 等)
-
可以进行复杂的数据分析和汇总
-
可以包含非分组列(在支持的功能中,如 MySQL 的非严格模式)
-
更灵活,功能更强大
主要区别
特性 | DISTINCT | GROUP BY |
---|---|---|
目的 | 去重 | 分组+聚合 |
性能 | 通常更快(简单去重) | 可能更慢(复杂操作) |
聚合函数 | 不能使用 | 可以使用 |
结果排序 | 不保证顺序 | 分组列通常有序 |
灵活性 | 有限 | 高 |
何时使用
-
使用
DISTINCT
当:-
只需要简单的去除重复行
-
不需要任何聚合计算
-
查询性能是关键因素
-
-
使用
GROUP BY
当:-
需要进行分组和聚合计算
-
需要更复杂的数据分析
-
需要按组计算统计信息
-
注意
在某些数据库中,对于简单的去重操作,DISTINCT
和 GROUP BY
可能产生相同的执行计划。例如:
SELECT DISTINCT column1 FROM table;
SELECT column1 FROM table GROUP BY column1;
但在大多数情况下,明确使用 DISTINCT
表达去重意图更清晰。