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

  • 相关阅读:
    C语言基础
    R安装包
    随笔
    计算机组成原理(三)--存储器的层次结构
    计算机组成原理(一)
    查找
    二叉树
    Mesos
    第三章 线性表
    第四章 栈与队列
  • 原文地址:https://www.cnblogs.com/Guhongying/p/10545962.html
Copyright © 2020-2023  润新知