1.运算符

2.模糊查询

3.where 后的判断基于表(表的直接内容),而不是基于结果(运算之后的别名)如:

可改成在where后再次重新计算判断:

或者使用having对结果判断:

having多用于group by 配合使用

4。一个实例

插入多条记录insert into stu values('张三','数学',90),('张三','语文',50),('张三','地理',40),('张四','数学',90),('张四','数学',30),('张四','数学',20),('张无','数学',30);

name course score

a:第一个想法是分组之后求出所有平均成绩却求不出未及格科目数量。所以就先取出所有两门以上未及格的学生再求平均

select avg(score),name from stu where name in(select name from stu where score<60 group by name having count(score) >=2) group by name;

b:一种更好的方案是:先求出平均分,再mysql没有布尔型可以通过逻辑判断是否及格得到1或0;通过求和得到未及格的数量,再进行判断

select name,avg(score),sum(score<60) as lowscore from stu group by name having lowscore>=2;

关于执行顺序说明:
group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选
需要注意having和where的用法区别:
1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
2.where肯定在group by 之前
3.where后的条件表达式里不允许使用聚合函数,而having可以。
当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:
1.执行where xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having xx进行筛选,返回第4个结果集。
5.针对第4个结果集排序。

最新文章

  1. [bzoj4726]Sabota
  2. PHP运行及语句及逻辑
  3. 使用php-cs-fixer格式化你的代码
  4. Java拼接批量新增SQL语句
  5. 页面内容排序插件jSort的使用
  6. Sublime 的中文乱码问题
  7. matlab实现判断是否能否生成严格对角占优矩阵
  8. python参考手册--第8章
  9. CSS3 box-shadow(阴影使用)
  10. -_-#【Backbone】Model
  11. 微信小程序知识总结及案例集锦
  12. switch_to 家族
  13. Oracle修改字段类型方法小技巧
  14. 查看win10系统产品密钥
  15. shell脚本编写遍历某一目录下的所有文件
  16. Spring 学习笔记(二)
  17. 关于 HDC 的释放
  18. Python作业之分页显示内容
  19. C#实现根据地图上的两点坐标,计算直线距离
  20. Flask 入门一( flask 框架和 flask-script 库)

热门文章

  1. centos7.0 没有netstat 和 ifconfig命令问题
  2. ecshop增加pc扫描二维码微信支付功能代码
  3. pgadmin(IDE)工具连接postgres数据库
  4. java 面试每日一题
  5. java 数组基本操作(一维)
  6. android的充电图标显示
  7. Uva 11584,划分成回文串
  8. java的报表下载代码excel
  9. 2016年12月11日 星期日 --出埃及记 Exodus 21:6
  10. 2016年11月1日 星期二 --出埃及记 Exodus 19:17