1.题目:现在运营想要查看所有来自浙江大学的用户题目回答明细情况,请你取出相应数据
question_practice_detail 答题详情表
user_profile 用户表
期望结果:
链表查询: 将question_practice_detail作为基础表,进行user_profile左连接,将用户表的university字段设置为浙江大学。
select
qpd.device_id,
qpd.question_id,
qpd.result
from
question_practice_detail as qpd
left join user_profile as up on qpd.device_id = up.device_id
where
up.university = '浙江大学'
子查询
select
qpd.device_id,
qpd.question_id,
qpd.result
from
question_practice_detail as qpd
where
device_id in(
select
device_id
from
user_profile
where university='浙江大学'
)
首先在user_profile中查找到university中为浙江大学的device_id,然后查question_practice_detail表中where条件查询中 in 查找到的device_id的结果。
2.统计每个学校的答过题的用户的平均答题数
user_profile 用户表
question_practice_detail 答题详情表
分析:每个学校的答题平均结果,那么就是每个学校的答题总数,除以每个学校的答题用户数,由于答题用户数可以用专门的device_id来标识,因为要统计总数,所以需要使用count函数。
由于要统计的是每个学校,所以需要使用group by来分组,结果需要保留4位小数,所以需要使用round函数。
将答题情况表和用户表连接:
select * from question_practice_detail left join user_profile on question_practice_detail.device_id = user_profile.device_id;
select university, count(question_id) from question_practice_detail left join user_profile on question_practice_detail.device_id = user_profile.device_id group by university;
统计每个学校的答题总数:
最终结果
select
university,
count(question_id) / count(distinct question_practice_detail.device_id) as avg_answer_cnt
from
question_practice_detail
left join user_profile on question_practice_detail.device_id = user_profile.device_id
group by
university;
3.统计每个学校各难度的用户平均刷题数
user_profile 用户表
question_practice_detail 答题详情表
question_detail 题目难度等级表
分析:由于是三张表 用户表 用户答题表 题目难度等级表,由于题目要求各难度各学校用户的等级,所以需要将三张表连起来查询,并且使用group by 学校 难度等级分组,由于是答过题的平均数,所以需要使用count统计
首先将三张表连接
select * from question_practice_detail left join user_profile on question_practice_detail.device_id = user_profile.device_id left join question_detail on question_practice_detail.question_id = question_detail.question_id;
结果:
select
university,
difficult_level,
round(
count(qpd.question_id) / count(distinct qpd.device_id),
4
) as avg_answer_cnt
from
question_practice_detail as qpd
left join user_profile as up on qpd.device_id = up.device_id
left join question_detail as qd on qpd.question_id = qd.question_id
group by
university,
difficult_level;