zoukankan      html  css  js  c++  java
  • 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后的

  • 相关阅读:
    [玩]用安卓手机搭建免费Linux服务器
    SSM自学教程
    outlook 2016 系列1--收件归类
    软件开发流程模型
    Android P系统编译之使用PRODUCT_COPY_FILES拷贝文件或文件夹
    车载系统交互的三秒原则
    同理心地图
    Excel 操作
    Android中5种最常见的内存泄漏问题以及解决办法
    android动画相关
  • 原文地址:https://www.cnblogs.com/Guhongying/p/10545962.html
Copyright © 2011-2022 走看看