需要理清楚一点是本题的核心是围绕 刷题数目,因此 核心表应该是 题目练习表: 只是使用了双表连接+SELECT 嵌套,先统计每个设备,难度下的答题数目,然后连接人员表 进行学校划分统计:
SELECT a.university, b.difficult_level, round(sum(b.cnt)/count(DISTINCT a.device_id),4) as avg_answer_cnt
FROM user_profile a right join # 此处使用右联接,因为核心表是答题表;不是所有人都有答题,左连接会出现NONE
(
SELECT device_id, difficult_level, count(1) as cnt
FROM question_practice_detail qpd left join question_detail qd on qpd.question_id=qd.question_id
WHERE qpd.question_id IS NOT NULL
GROUP BY device_id, difficult_level
) b on a.device_id=b.device_id
GROUP BY a.university,b.difficult_level
;
个人不足记录:
- 可以直接进行多表链接,提高效率; 2.左连接,右联接的问题是弄清楚核心需求和对应的表格