在使用Group By进行分组后,对分组后的数据进行Having过滤,DataGrip有时会出现如下错误
Using aggregate-free condition(s) in HAVING clause might be inefficient. Consider moving them to WHERE
例如查询语句如下:
select s_id, round(avg(score.s_score),1) as avg_score
from score
group by score.s_id
having avg_score >= 60;
对学生成绩按照学生ID进行分组后,使用having筛选出平均成绩大于等于60的数据,此时就会出现该错误提示
解决方法:having的筛选字段avg_score是函数round(avg(score.s_score),1)的别名,在having中应该直接使用round(avg(score.s_score),1),不需要别名代替即可,正确写法如下:
select s_id, round(avg(score.s_score),1) as avg_score
from score
group by score.s_id
having round(avg(score.s_score),1) >= 60;