group by 和distinct区别

一、group by

分组原理

通过单个元素分组(name)
select * from student group by name

左边是实表(student),右边是经group by之后生成的虚拟表
在这里插入图片描述

多个元素分组(name,age)
select * from student group by name,age

左边是实表(student),右边是经group by之后生成的虚拟表
在这里插入图片描述

(1)如果执行select 的话,那么返回的结果应该是虚拟表,可是id和age中有的单元格里面的内容是多个值的,而关系数据库就是基于关系的,单元格中是不允许有多个值的,所以执行select 语句就报错了。

(2)name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。

(3)那么对于id和age里面的单元格有多个数据的情况怎么办呢?答案就是用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。如cout(id)而每个聚合函数的输入就是每一个多数据的单元格。
(4)group by 多个字段该怎么理解呢:如group by name,age,我们可以把name和age 看成一个整体字段,以他们整体

二、distinct

在查询时可以使用distinct过滤重复数据

在这里插入图片描述

被distinct修饰的字段,一般情况下需要将distinct放在第一位

过滤单个字段

select distinct aaa.name from aaa

在这里插入图片描述

过滤多个字段
将两个字段看成一个整体去匹配重复的字段

select distinct aaa.name,aaa.age FROM aaa

在这里插入图片描述

distinct和聚合函数使用时,要将distinct放在聚合函数里面,

select count(DISTINCT aaa.age,aaa.name) from aaa

distinct和聚合函数一起使用,则distinct修饰的字段可以不用放在第一位
在这里插入图片描述

select aaa.age,count(distinct aaa.name) from aaa

在这里插入图片描述

**count()**函数返回字段的数量

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值