题解 | #分组过滤练习题#

分组过滤练习题

https://www.nowcoder.com/practice/ddbcedcd9600403296038ee44a172f2d

在MySQL中使用WHERE子句来筛选聚合函数结果是不被支持的,这是SQL语法的限制。这是因为WHERE子句在执行查询时会在分组之前进行过滤,而聚合函数是在分组之后计算的。

如果使用WHERE子句来筛选聚合函数结果,MySQL无法确定在分组之前如何计算avg_question_cnt和avg_answer_cnt。因此,会报出SQL异常。

解决这个问题的方法是使用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;

这样就可以正确地根据聚合函数的结果进行筛选了。

全部评论

相关推荐

01-12 17:45
门头沟学院 Java
985废物一枚:就是问问你能不能接受北京的房租,hr也知道公司工资不高,大概率是要贴钱的
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务