MySQL数据分组Group By 和 Having

现有以下的学生信息表:

MySQL数据分组Group By 和 Having

若果现在想计算每个班的平均年龄,使用where的操作如下:

SELECT Cno AS 班级, AVG(Sage) AS 平均年龄
FROM stu
Where Cno=5;

MySQL数据分组Group By 和 Having

这样的话,有多少个班就需要操作几次

因此引入分组 GROUP BY子句,根据列来分组,先看一下《MySQL必知必会》的提示:

MySQL数据分组Group By 和 Having

引入分组后,操作如下:

SELECT Cno AS 班级,AVG(Sage) AS 平均年龄 FROM stu GROUP BY Cno;

MySQL数据分组Group By 和 Having

由此可以理解,GROUP BY 根据给出的列进行分组,具有相同列属性的被分到一组,然后你需要对组内的数据执行什么操作,就和平常的一样,只是操作的不再是所有的数据,而是分组后的。

过滤分组

使用GROUP BY将数据分组后,还可以使用HAVING过滤分组,规定包括哪些分组,排除哪些分组,比如想在上述的学生信息表中,找出多于2个人的班级,使用以下的操作

SELECT Cno AS 班级,COUNT(Cno) AS 人数
FROM stu
GROUP BY Cno
HAVING COUNT(Cno)>=2;

MySQL数据分组Group By 和 Having

关于HAVING和WHERE的区别 《MySQL必知必会》

HAVING和WHERE的差别  这里有另一种理解方法,WHERE在数据 分组前进行过滤,HAVING在数据分组后进行过滤。

这是一个重 要的区别,WHERE排除的行不包括在分组中。这可能会改变计 算值,从而影响HAVING子句中基于这些值过滤掉的分组。 

从sql语句上而言,WHERE是写在GROUP BY前的,而HAVING是在GROUP BY后的

上一篇:MySQL报错: Character set ‘utf8mb4‘ is not a compiled character set and is not specified in the ‘/usr/share/mysql/charsets/Index.xml‘ file


下一篇:MonthPicker