题解 | #分组过滤练习题#
分组过滤练习题
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;
这样就可以正确地根据聚合函数的结果进行筛选了。