MySQL知识学习——第十三天:分组数据

前言

又是新的一周,继续努力呀~

数据分组

怎么理解数据分组呢?举个简单的例子,一个学校有一个高三年级的学生名单,整个年级有三个班,这样我们就可以按照班级对数据进行分组。

个人理解的话,分组就是将具有某个相同值的数据分离开。

创建分组

那么如何进行分组呢?分组是在SELECT语句的GROUP BY子句中建立的。

看下面的例子,针对下面的表格(student)
在这里插入图片描述
我们对上面的表进行分组。
在这里插入图片描述
group by子句在后面要跟列名,它会把该列中具有相同的值的记录合成一组。

在这里插入图片描述
group by 子句可以包含任意数目的列,它会把后面跟的所有列值相同的分在一组,比如看下面的例子
在这里插入图片描述
在这里插入图片描述
因为只有第一条记录和第二条记录的class列和name的值都相等,所有他们在同一组,其余记录各占一组。

在这里插入图片描述

过滤分组

在上面的例子中,我们按class分组会得到三组数据,那么我只想得到一班和二班的总人数该怎么办呢?这时候就需要对分组进行过滤了。也就是按照某个标准排除掉某些分组。

咋一看比较简单,我直接加一个WHERE子句不就可以了吗?答案是不行,为什么呢?因为WHERE过滤指定的是行而不是分组。事实上, WHERE没有分组的概念

我们利用HAVING子句来对分组数据进行过滤,也就是说HAVING过滤的是分组,它的用法与WHERE子句的用法比较相似。

事实上,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行,而HAVING过滤分组

在这里插入图片描述
那么怎么过滤分组呢?我们来看下面的例子
在这里插入图片描述
上面的例子过滤掉了class为3的分组。

在这里插入图片描述
前面我们提到HAVING子句在WHERE子句后面,对于MySQL来说,先执行WHERE子句,在执行HAVING子句
在这里插入图片描述
结果为什么是这样呢?原因是先执行WHERE子句,执行完之后的表格实际上是
在这里插入图片描述
也就是对上面的表格再进行分组,所以最终的结果就只有一条。

分组和排序

我们现在知道分组是利用GROUP BY子句,排序是ORDER BY子句。

虽然GROUP BY和ORDER BY经常完成相同的工作,但它们是非常不同的。

在这里插入图片描述
在这里插入图片描述

SELECT子句顺序

到这里,我们已经学习了较多的子句,今天就大致总结一下子句的顺序
在这里插入图片描述
在这里插入图片描述

今天的内容比较简单,但是十分重要,大家可以自行多练练~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值