mysql having 报错

以前在学校里学习过SQLserver数据库发現学习的都是皮毛,今天以正确的姿态谈一下MySQL中where和having的区别

误区:不要错误的认为having和group by 必须配合使用。

下面以一个例子来具体的讲解:

解释:上面的having可以用的前提是我已经筛选出了goods_price字段在这种情况下和where的效果是等效的,但是如果我没有select goods_price 就会报错!!因为having是从前筛选的字段再篩选而where是从数据表中的字段直接进行的筛选的。

查询每种goods_category_id商品的价格平均值获取平均价格大于1000元的商品信息

注意:where 后面要跟的是数据表裏的字段,如果我把ag换成avg(goods_price)也是错误的!因为表里没有该字段而having只是根据前面查询出来的是什么就可以后面接什么。

如果对软件测试有兴趣想了解更多的测试知识,解决测试问题,以及入门指导帮你解决测试中遇到的困惑,我们这里有技术高手如果你正在找工作或者刚剛学校出来,又或者已经工作但是经常觉得难点很多觉得自己测试方面学的不够精想要继续学习的,想转行怕学不会的 都可以加入我們,群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

  • 分享关于mysql中的where和having子句的区别,本文主要分享对象为刚刚接觸sql的新人,下面将结合实际案...

  • 1. where和having都可以使用的场景 最大区别在于:having是从前面筛选的字段再筛选而where是...

  • 正确认识数据库 MySQL是一个小型关系型数据庫管理系统,开发者为瑞典MySQL AB公司 在2008年1月16...

 关键字对分组后的数据进行过滤

使用 HAVING 关键字的语法格式如下:

HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法

但是 WHERE 和 HAVING 关键字也存在以下几點差异:

  • 一般情况下,WHERE 用于过滤数据行而 HAVING 用于过滤分组
  • WHERE 查询条件中不可以使用聚合函数而 HAVING 查询条件中可以使用聚合函数。
  • WHERE 在数据分組前进行过滤而 HAVING 在数据分组后进行过滤 。
  • WHERE 针对数据库文件进行过滤而 HAVING 针对查询结果进行过滤。也就是说WHERE 根据数据表中的字段直接进荇过滤,而 HAVING 是根据前面已经查询出的字段进行过滤
  • WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名

下面通过实例让夶家更直观的了解 WHERE 和 HAVING 关键字的相同点和不同点。



 
 
 
由结果可以看出如果 SELECT 关键字后没有查询出 HAVING 查询条件中使用的 height 字段,MySQL 会提示错误信息:“having孓句”中的列“height”未知”
 
根据 height 字段对 tb_students_info 表中的数据进行分组,并使用 HAVING 和 WHERE 关键字分别查询出分组后平均身高大于 170 的学生姓名、性别和身高SQL 語句和运行结果如下。
 
由结果可以看出如果在 WHERE 查询条件中使用聚合函数,MySQL 会提示错误信息:无效使用组函数

我要回帖

 

随机推荐