MySQL数据分组Group By 和 Having
现有以下的学生信息表:

若果现在想计算每个班的平均年龄,使用where的操作如下:
SELECT Cno AS 班级, AVG(Sage) AS 平均年龄
FROM stu
Where Cno=5;

这样的话,有多少个班就需要操作几次
因此引入分组 GROUP BY子句,根据列来分组,先看一下《MySQL必知必会》的提示:

引入分组后,操作如下:
SELECT Cno AS 班级,AVG(Sage) AS 平均年龄 FROM stu GROUP BY Cno;

由此可以理解,GROUP BY 根据给出的列进行分组,具有相同列属性的被分到一组,然后你需要对组内的数据执行什么操作,就和平常的一样,只是操作的不再是所有的数据,而是分组后的。
过滤分组
使用GROUP BY将数据分组后,还可以使用HAVING过滤分组,规定包括哪些分组,排除哪些分组,比如想在上述的学生信息表中,找出多于2个人的班级,使用以下的操作
SELECT Cno AS 班级,COUNT(Cno) AS 人数
FROM stu
GROUP BY Cno
HAVING COUNT(Cno)>=2;

关于HAVING和WHERE的区别 《MySQL必知必会》
HAVING和WHERE的差别 这里有另一种理解方法,WHERE在数据 分组前进行过滤,HAVING在数据分组后进行过滤。
这是一个重 要的区别,WHERE排除的行不包括在分组中。这可能会改变计 算值,从而影响HAVING子句中基于这些值过滤掉的分组。
从sql语句上而言,WHERE是写在GROUP BY前的,而HAVING是在GROUP BY后的
MySQL数据分组Group By 和 Having的更多相关文章
- MySQL数据分组GROUP BY 和HAVING
对于分组的理解,可以这样:对GROUP BY子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作. 举例如下:在产品表中,检索每一个供应商提供的商品的数量. mysql> SELEC ...
- [mysql] Mysql数据分组GROUP BY 和HAVING,与WHERE组合使用
理解分组,可以这样:对GROUP BY子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作. 举例:在产品表中,检索每一个供应商提供的商品的数量. mysql> SELECT ven ...
- 9.数据分组 group by
--数据分组 group by --作用:用于 对查询的数据进行分组,并处理 select deptno,job from emp group by deptno,job --1.分组之后,不能将除分 ...
- mysql数据分组
创建分组 分组是在SELECT语句中的GROUP BY 子句中建立的. 例: SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY ...
- MySQL必知必会(数据分组,Group by和Having子句, Select子句的顺序)
SELECT vend_id, COUNT(*) AS num_prods FROM products #GROUP BY子句可以包含任意数目的列,多行NULL值将分为一组 GROUP BY vend ...
- Mysql 数据分组取某字段值所有最大的记录行
需求: 表中同一个uid(用户)拥有多条游戏等级记录,现需要取所有用户最高等级(level)的那一条数据,且时间(time)越早排越前.这是典型的排名表 +------+-------+------- ...
- mysql分组GROUP BY常用sql
数据分组 GROUP BY GROUP BY可以根据一个或多个字段进行分组. 比如,根据prod_id分组: SELECT prod_id ,user_id FROM products GROUP B ...
- 第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数
第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; ...
- 在mysql中使用group by和order by取每个分组中日期最大一行数据
转载自:https://blog.csdn.net/shiyong1949/article/details/78482737 在mysql中使用group by进行分组后取某一列的最大值,我们可以直接 ...
随机推荐
- spring总结之一(spring开发步骤、bean对象的管理、bean生命周期)
###spring 1.概念:开源,轻量级,简化开发的企业级框架. 开源:免费,发展快. 轻量级:占内存小. 简化开发:通用的功能封装,提高程序员的开发效率.--------------------- ...
- modelform save
ModelForm表单 save()方法 每一个ModelForm都有一个save()方法,这个方法可以更具绑定的form表单创建并且保存一个数据库对象,ModelForm的子类可以接受一个model ...
- Golang框架Beego在Windows环境下小试牛刀
Beego官网beego官网 : https://beego.me/github : https://github.com/beego Beego安装前提: ①Go 1.1+ 以确保所有功能的正常使用 ...
- fjwc2019 D2T2 定价 (栈+set+贪心)
#182. 「2019冬令营提高组」定价 先瞄下数据范围 对于所有数据,1≤n≤1000,1≤m≤10^9,1≤q≤500000 .\textbf{2 操作的个数不超过 1000.} $10^9$位, ...
- Linux 添加网卡
Linux 添加网卡 1.写入网卡配置 vim /etc/sysconfig/network-scripts/ifcfg-eth1 # 网卡名字 DEVICE=eth1 # 网卡类型 TYPE=Eth ...
- Spring 学习——Spring框架结构、概念
maven项目结构 记忆:在一个项目中,project下一层级时src,也就是源文件,所有需要进行编译的文件都是在这个目录下,其实也就是这一个目录,然后向下扩展.在src目录下,存在main文件夹,里 ...
- ODAC(V9.5.15) 学习笔记(三)TOraSession(4)
4. 数据库信息 名称 类型 说明 GetDatabaseNames 获取对应的数据库对象名称列表 GetSequenceNames GetStoredProcNames GetTableNames ...
- Docker 使用Docker-Compose编排容器
简介: Docker Compose是一个用来定义和运行复杂应用的Docker工具.一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose不再需要使用shell脚本来启动 ...
- linux网络流量实时监控工具之nload
Install nload on a CentOS/RHEL/Red Hat/Fedora Linux First, turn on EPEL repo on a CentOS or RHEL bas ...
- oracle单行函数 之 时间函数
select systemdate from dual --得到时间 select systemdate+300 from dual --日期 +数字=日期,表示若干天之后的日期 select s ...