现有以下的学生信息表:

若果现在想计算每个班的平均年龄,使用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后的

最新文章

  1. Android SDK 与API版本对应关系
  2. entOS7安装iptables防火墙,试验未通过
  3. valgrind 内存检测与调用图生成
  4. ng-if和ng-show的区别
  5. 构建安全的Xml Web Service系列之wse之错误代码详解
  6. nginx安装文档
  7. bzoj1193: [HNOI2006]马步距离
  8. day52类型转换 运算符 流程控制
  9. 包建强的培训课程(16):Android新技术入门和提高
  10. module_loader.py
  11. php 限制类的对象类型
  12. web前端之性能
  13. CSS_常见布局
  14. C# 流水号生成器开发
  15. 毕业设计 之 二 PHP集成环境(Dreamweaver)使用
  16. (1) Mysql高性能优化规范建议
  17. FineBI学习系列之FineBI的ETL处理(图文详解)
  18. JAVA中的email正则表达式
  19. HDU 6194 后缀数组
  20. svn的使用总结

热门文章

  1. MyBatis中#{ }和${ }的区别,数据库优化遵循层次和查询方法
  2. 数据库的增、删、改、查 (CURD)
  3. dubbo-启动时检查
  4. GitHub客户端使用
  5. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem A - B
  6. tr 命令用法
  7. Jenkins 总结
  8. javascript对文件的读写
  9. Python3 tkinter基础 Frame bind 捕捉多键同时按
  10. 找质数|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)