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后的

 

posted @ 2019-03-17 11:07  一去二三浪里小白龙  阅读(10721)  评论(0编辑  收藏  举报
//增加一段JS脚本,为目录生成使用