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

分组过滤练习题

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;

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

全部评论

相关推荐

点赞 评论 收藏
分享
见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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