面试官:来吧,说一下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
面试官又问:那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)对分组内进行筛选