having和where的区别
参考自:https://www.cnblogs.com/ljf-Sky/p/9024683.html https://blog.csdn.net/JDJH1024/article/details/76647866
本质的区别就是where筛选的是记录,而having筛选的是组。
1、where和having都可以使用的场景:
select goods_price,goods_name from sw_goods where goods_price>100
select goods_price,goods_name from sw_goods having goods_price>100
原因:goods_price作为条件也出现在了查询字段中。
2、只可以使用where,不可以使用having的情况:
select goods_name,goods_number from sw_goods where goods_price>100
select goods_name,goods_number from sw_goods having goods_price>100(X)
原因:如果having后面的条件不是聚合函数,则需要在select之后出现。
注意:如果having后面使用的判断条件是聚合函数,则不需要在select中出现相同字段。
select name from student group by name having min(score)>80 这种情况是允许的,因为having后面使用的是聚合函数作为判断条件,则select后面可以不需要出现min(score)
3、只可以使用having,不可以使用where的情况:
select goods_category_id,avg(good_price) as ag from sw_goods group by goods_category having ag>1000
select goods_category_id,avg(goods_price) as ag from sw_goods where ag>1000 group by goods_category(X)报错,这个表里没有这个ag这个字段。
where子句中一般不使用聚合函数那种情况。
注意事项 :
1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。
2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
作者:zoufh
出处:https://www.cnblogs.com/zoufh/p/13973527.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端