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;

# 1. **`WHERE` 子句**:
#    - 作用于**原始数据行**,在数据分组(`GROUP BY`)之前执行
#    - 只能筛选**单个行的字段值**,不能使用聚合函数(如 `AVG()`、`SUM()` 等)作为筛选条件

# 2. **`HAVING` 子句**:
#    - 作用于**分组后的结果**,在 `GROUP BY` 之后执行
#    - 专门用于筛选**聚合函数计算后的结果**(如平均值、总和等)

# 在你的查询中,需要筛选的是 `avg(question_cnt) < 5` 或 `avg(answer_cnt) < 20`,这些都是**分组后的聚合结果**,而不是原始数据中的字段值。因此:
# - 不能用 `WHERE`,因为 `WHERE` 无法处理聚合函数的结果
# - 必须用 `HAVING`,因为它是专门为筛选分组后的聚合结果设计的

# 简单来说:`WHERE` 管行,`HAVING` 管组。涉及聚合函数的筛选,只能用 `HAVING`。