SQL-聚合函数结果作为筛选条件时where与having用法的区别

本文通过牛客网的一道题目,解释了在SQL查询中,当聚合函数如avg用于筛选条件时,应当使用having而非where子句。错误示例展示了直接在where子句中使用聚合函数会导致语法错误,而正确的做法是在having子句中进行条件判断,以获取平均发贴数低于5或平均回帖数小于20的学校信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

牛客网题目:表user_profile,查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。

 

如果用where,则需要用到子查询语句:

select * 
from
(select 
 university,
 avg(question_cnt) as avg_question_cnt,
 avg(answer_cnt) as avg_answer_cnt
from user_profile
group by university) as t
 where t.avg_question_cnt<5 or t.avg_answer_cnt<20

如果想用聚合函数结果 avg(question_cnt)<5 or avg(answer_cnt)<20作为筛选条件,则不能用where,而是用having语句。

错误:

select uni

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值