题意解读

仔细阅读题目,我们首先可以明确,最终呈现结果有三列,所以在select的部分肯定要包含这三部分(其中university列的存在意义是用于分组);其次,我们需要查看筛选条件,那就是两个新建的字段(avg_question_cnt avg_answer_cnt)的值限制范围,由此我们可以进行sql语句的编写

易错点

  1. where和having的使用辨析:where用于筛选原有字段,having用于筛选新建字段。在本题中审题可知应用having进行筛选。

SQL代码

select
    university,
    round(avg(question_cnt),3) as avg_question_cnt,
    round(avg(answer_cnt),3) as avg_answer_cnt
from
    user_profile
group by
    university
having
    avg_question_cnt < 5
    or
    avg_answer_cnt < 20;

三段式编写经验

  1. select段:选中表中原有字段,或者通过函数及运算表达式新建字段
  2. from段:指定取数据的表格
  3. 数据操作段:对字段进行组/排序/筛选/行数等等操作

总结

在SQL的运行过程中,程序不是从上到下顺序执行的,更像是数据出入栈的方式进行运行,比如实际上现实从database中挑出table,然后再从table中选择或者创建字段,最后再根据这些字段进行筛选,因此,这和一般的程序代码的执行逻辑略有不同,使用SQL时要习惯这种编写逻辑与风格。