前言
面试官:来吧,说一下mysql中 having怎么使用的?
正文
我们使用having 都是和group by 一起使用。
举个例子:假设一个成绩表,字段有:class , score ,name ,sex
我们查每一个班级的平均分是这样子查的
select class, avg(score) from table group by class
那现在有一个特殊的要求,要查出平均分大于80的班级
select class, avg(score) from table group by class having avg(score)>80
这里给大家插一条!!福利
----------------福利 -------------------------
大家知道,我今年刚好38岁!
也刚好创业 4 年,「就聊挣钱」星球运营 6 年了,星球用户刚好是 10812 位朋友。
我的生活、我的事业、我的感想,都会分享到这个社群中,很多很多小伙伴已经跟着续费了 6 年。
可以说,这个星球见证了我的成长,从业余时间副业开始挣钱,到现在成为了一名真的创业者。
整个过程、整个经历、整个思考,都沉淀在这个星球里了。
从2018年8月8日我写第一个帖子开始,到现在星球已经有 7200+ 的帖子,精华帖就有 637 条。
今年双十一,我的星球要冲击 11111 个用户,到现在为止刚好差 300 人,于是我决定今年双十一活动。
给大家发 300 张,历史最大的优惠券!299 的星球给大家发 200 元优惠券,仅需要 99 元即可加入(6年最低)!
到达 11111 用户会,星球立刻恢复原价 299 元!希望和老读者们,一起见证这个历史时刻!
----------------------分割线 继续-----------------------------
面试官又问:那where 和 having 一起使用,是怎么使用的?
以上面的例子继续距离,我们的需求是要 查询出每个班级的男生的平均分,且平均分大于80的班级有哪些?
select class ,avg(score) from table where sex='male' group by class having avg(score)>80
面试官再问:没group by 能用having吗
可以是可以,但是意义并不大
select * from table where score>80
select * from table having score>80
这俩一样
面试官还问:那你说说 where 和 having 区别是什么?
where一般是用于对于表进行筛选
having一般是用于 对于分组进行筛选
那上面的例子
select class, avg(score) from table group by class having avg(score)>80
这就是group by class, 用class做了分组 ,在拿avg(score)对分组内进行筛选