SQL DISTINCT 与 GROUP BY

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 的非严格模式)

  • 更灵活,功能更强大

主要区别

特性DISTINCTGROUP BY
目的去重分组+聚合
性能通常更快(简单去重)可能更慢(复杂操作)
聚合函数不能使用可以使用
结果排序不保证顺序分组列通常有序
灵活性有限

何时使用

  • 使用 DISTINCT 当:

    • 只需要简单的去除重复行

    • 不需要任何聚合计算

    • 查询性能是关键因素

  • 使用 GROUP BY 当:

    • 需要进行分组和聚合计算

    • 需要更复杂的数据分析

    • 需要按组计算统计信息

注意

在某些数据库中,对于简单的去重操作,DISTINCT 和 GROUP BY 可能产生相同的执行计划。例如:

SELECT DISTINCT column1 FROM table;
SELECT column1 FROM table GROUP BY column1;

但在大多数情况下,明确使用 DISTINCT 表达去重意图更清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值