关于mysql的where和having的一些疑问

写法1:错误

select id,name,round(st_distance_sphere(point(138.12,32.12),point(`long`,`lat`))/1000, 2) distance from `shops` where distance>1000

写法2:正确

select id,name,round(st_distance_sphere(point(138.12,32.12),point(`long`,`lat`))/1000, 2) distance from `shops` where round(st_distance_sphere(point(138.12,32.12),point(`long`,`lat`))/1000, 2)>1000

写法3:正确

select id,name,round(st_distance_sphere(point(138.1231231,32.12312),point(`long`,`lat`))/1000, 2) distance from `shops` having distance>1000

问题

为什么 round(st_distance_sphere(point(138.12,32.12),point(long,lat))/1000, 2)要用having?

让PHP再次伟大
最佳答案

1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。 2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。 ———————————————— 版权声明:本文为CSDN博主「江枫渔火L」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/qq_35269216/article/...

2年前 评论
勇敢的心 (楼主) 2年前
勇敢的心 (楼主) 2年前
哪吒的狗腿子 (作者) 2年前
讨论数量: 5

WHERE 关键字无法与聚合函数一起使用

与之相反,HAVING 关键字专门与聚合函数一起使用

所以由聚合函数计算出的结果用HAVING,否则用WHERE

2年前 评论

1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。 2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。 ———————————————— 版权声明:本文为CSDN博主「江枫渔火L」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/qq_35269216/article/...

2年前 评论
勇敢的心 (楼主) 2年前
勇敢的心 (楼主) 2年前
哪吒的狗腿子 (作者) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!