group by与distinct有何区别

本文详细解析了SQL中的DISTINCT与GROUP BY语句的功能差异,并通过具体例子展示了它们在实际应用中的不同之处。DISTINCT用于去除重复记录,而GROUP BY则常用于数据分组并配合聚合函数进行统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select   distinct   a   from   tbl   =     select   a   from   tbl   group   by   a  
   
  他们的功能基本上是不一样的。  
  distinct消除重复行。  
  group   by是分组语句。 

 

举例来说可能方便一点。  
  A表  
  id   num  
  a     1  
  b     2  
  c     3  
  a     4  
  c     7  
  d     3  
  e     5  
   
  如果只选出id列,用distinct和group   by   一样的。  
  select   distinct(id)   from   A;  
  id  
  a  
  b  
  c  
  d  
  e;  
  select   id   from   A   group   by   id;  
  id  
  a  
  b  
  c  
  d  
  e;  
  不同之处可能在于group   by有排序功能。  
  但是如果需要加上另一列num,结果不同。  
  group   by   是分组语句,如果用  
  select   id,num   from   A   group   by   id,num;  
  这样的结果在本例中与不加group   by是一样的,因为num各个不同。  
  但是如果  
  select   id,num   from   A   group   by   id;  
  注意该语句是错误语句,因为num没有使用聚组函数,例如:sum(求和),avg(求平均数)  
  select   id,sum(num)   from   A   group   by   id;  
  id   sum(num)  
  a     5  
  b     2  
  c     10  
  d     3  
  e     5  
   
  用distinct不显示重复的行。  
  在本例中  
  select   distinct   id,num   from   A;的结果也和不加distinct一致。  
  因为id,num没有重复的行,而不是只看id。  
   
  group   by   功能更强大一些,另外推荐使用group   by。  
  因为distinct会导致全表扫描,而group   by如果索引建的  
  恰当的话,会有性能上的提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值