理论知识:
having与where的区别:
having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合
在查询过程中执行顺序:from>where>group(含聚合)>having>order>select。
案例:
1.where和having都可以使用情况:
select price, name from goods where price > 100
select price, name from goods having price > 100
2.where 可以使用,having不可以使用
select name, number from goods where price > 100
select name, number from goods having price > 100//错误
因为前面并没有筛选出 price 字段,所以不能用having
3.having 可以使用,where不可以使用
聚合函数结果作为筛选条件时,不能用where,而是用having语法
select university,
avg(question_cnt) as avg_question_cnt,
avg( answer_cnt) as avg_answer_cnt
from user_profile
group by university
having avg_question_cnt<5 or avg_answer_cnt<20
select university,
avg(question_cnt) as avg_question_cnt,
avg( answer_cnt) as avg_answer_cnt
from user_profile
group by university
where avg_question_cnt<5 or avg_answer_cnt<20//报错