题解 | #分组过滤练习题#
分组过滤练习题
https://www.nowcoder.com/practice/ddbcedcd9600403296038ee44a172f2d
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
WHERE和HAVING在以下三个方面存在区别:
用法不同:WHERE在SELECT、UPDATE、DELETE和INSERT INTO语句中都可以使用,而HAVING只能用在SELECT语句中。
执行顺序不同:WHERE的搜索条件是在执行语句进行分组之前应用的,而HAVING的搜索条件是在分组条件后执行的。因此,如果WHERE和HAVING同时出现在语句中,WHERE会先执行,HAVING后执行。
子句不同:WHERE子句中的条件表达式都可以被HAVING子句使用,但是HAVING子句中的某些表达式不能被WHERE子句使用。另外,HAVING子句可以使用集合函数(如SUM、COUNT、AVG、MAX和MIN),而WHERE子句不能使用。
在某些情况下,WHERE和HAVING都可以使用,比如进行分组汇总和过滤非法项。在这种情况下,根据需要选择使用哪个。