这道题还算有点子复杂,贯穿了三个表的信息,调试了好几次才做出来。
主要还是涉及到连表查询的都要分析各表之间的共同点(连接点),要能够分离出条件并用合理的关键字过滤,以及分组的依据都要考虑清楚。
这道题的几个关键词 山东大学 做过题的 不同难度下
既要是山东大学的学生又要是做过题目的,而表一是所有用户信息表,表二是做了题的所有用户具体他情况表,所以过滤条件是 1中山东大学成员 和 2的用户交集 所以where中的条件是:
where(t1.university = '山东大学'&& t1.device_id = t2.device_id )
而从题目:运营想要查看参加了答题的山东大学的用户在不同难度下的平均答题题目数 中可知
分组条件是题目难度,而用户对应做题的题目编号在表二,题目编号对应的难度情况体现在表三,
所以要将表二和表三进行连表查询,并以难度为分组条件,所以有:
- left join question_detail t3
- on t3.question_id=t2.question_id
group by difficult_level
完整代码:
- select t1.university,t3.difficult_level,(count(t2.question_id)/count(distinct t2.device_id))avg_answer_cnt
- from user_profile t1 ,question_practice_detail t2
- left join question_detail t3
- on t3.question_id=t2.question_id
- where(t1.university = '山东大学'&& t1.device_id = t2.device_id )
- group by difficult_level;
这道题考察的就是一个union / union all
完整代码:
- select device_id,gender,age,gpa
- from user_profile
- where university='山东大学'
-
- union all
-
- select device_id,gender,age,gpa
- from user_profile
- where gender = 'male'
以后做的SQL题目都往这里写笔记(持续更新...)