select
up.university,
qd.difficult_level,
round(count(qpd.id)/count(distinct up.device_id), 4) as
avg_answer_cnt
from
user_profile up
join
question_practice_detail qpd on
up.device_id = qpd.device_id
join
question_detail qd on
qpd.question_id = qd.question_id
where
up.university = '山东大学'
group by
up.university,qd.difficult_level
order by
qd.difficult_level;
select
up.university,
qd.difficult_level,
round(count(qpd.id)/count(distinct up.device_id), 4) as
avg_answer_cnt /
count(qpd.id):统计question_practice_detail表中每个分组内的答题记录数量,即总的答题次数。count(distinct up.device_id):统计user_profile表中每个分组内不同的设备 ID 数量,也就是参与答题的不同学生数量。count(qpd.id)/count(distinct up.device_id):将总的答题次数除以参与答题的不同学生数量,得到每个分组下学生的平均答题数量。round(..., 4):使用ROUND函数将计算得到的平均答题数量结果保留 4 位小数。as avg_answer_cnt:为计算结果指定一个别名avg_answer_cnt,方便后续引用。
from
user_profile up
join
question_practice_detail qpd on
up.device_id = qpd.device_id/
join question_practice_detail qpd on up.device_id = qpd.device_id:使用JOIN操作将user_profile表和question_practice_detail表连接起来。连接条件是两个表中的device_id相等,这样就可以将学生的基本信息(如学校)和他们的答题记录关联起来。同时为question_practice_detail表指定别名qpd。
join
question_detail qd on
qpd.question_id = qd.question_id/
join question_detail qd on qpd.question_id = qd.question:再次使用JOIN操作,将question_practice_detail表和question_detail表连接起来。连接条件是question_practice_detail表的question_id与question_detail表的question字段相等。这里可能存在问题,通常应该是qpd.question_id = qd.question_id,因为一般两个表关联时会使用相同含义的字段进行连接。
where
up.university = '山东大学' /
该子句用于筛选出 user_profile 表中学校为山东大学的学生记录,只对这些学生的答题记录进行后续的统计和分析。
group by
up.university,qd.difficult_level /
该子句将连接后的结果按照 user_profile 表中的 university 字段和 question_detail 表中的 difficult_level 字段进行分组。
order by
qd.difficult_level; /
这里按照 question_detail 表中的 difficult_level 字段进行升序排序

京公网安备 11010502036488号