首先用以下代码获得多表查询的结果:

select *
from user_profile u, question_practice_detail qpd, question_detail qd
where u.device_id = qpd.device_id and qpd.question_id = qd.question_id;
1|2138|male|21|北京大学|3.400|7|2|12|1|2138|111|wrong|1|111|hard
2|3214|male|None|复旦大学|4.000|15|5|25|3|3214|113|wrong|3|113|easy
2|3214|male|None|复旦大学|4.000|15|5|25|2|3214|112|wrong|2|112|medium
3|6543|female|20|北京大学|3.200|12|3|30|4|6543|111|right|1|111|hard
4|2315|female|23|浙江大学|3.600|5|1|2|19|2315|117|wrong|6|117|easy
4|2315|female|23|浙江大学|3.600|5|1|2|14|2315|117|wrong|6|117|easy
4|2315|female|23|浙江大学|3.600|5|1|2|13|2315|116|right|5|116|medium
4|2315|female|23|浙江大学|3.600|5|1|2|12|2315|115|right|4|115|easy
4|2315|female|23|浙江大学|3.600|5|1|2|7|2315|117|wrong|6|117|easy
4|2315|female|23|浙江大学|3.600|5|1|2|6|2315|116|right|5|116|medium
4|2315|female|23|浙江大学|3.600|5|1|2|5|2315|115|right|4|115|easy
5|5432|male|25|山东大学|3.800|20|15|70|23|5432|113|wrong|3|113|easy
5|5432|male|25|山东大学|3.800|20|15|70|21|5432|112|wrong|2|112|medium
5|5432|male|25|山东大学|3.800|20|15|70|20|5432|117|wrong|6|117|easy
5|5432|male|25|山东大学|3.800|20|15|70|18|5432|113|wrong|3|113|easy
5|5432|male|25|山东大学|3.800|20|15|70|16|5432|112|wrong|2|112|medium
5|5432|male|25|山东大学|3.800|20|15|70|15|5432|117|wrong|6|117|easy
5|5432|male|25|山东大学|3.800|20|15|70|11|5432|113|wrong|3|113|easy
5|5432|male|25|山东大学|3.800|20|15|70|9|5432|112|wrong|2|112|medium
5|5432|male|25|山东大学|3.800|20|15|70|8|5432|117|wrong|6|117|easy
6|2131|male|28|山东大学|3.300|15|7|13|22|2131|113|right|3|113|easy
6|2131|male|28|山东大学|3.300|15|7|13|17|2131|113|right|3|113|easy
6|2131|male|28|山东大学|3.300|15|7|13|10|2131|113|right|3|113|easy

然后分组(先分学校组,再分难度组),求得每个学校各难度的用户平均刷题数:

select u.university, qd.difficult_level, 
    count(qpd.question_id) / count(distinct(qpd.device_id))
from user_profile u, question_practice_detail qpd, question_detail qd
where u.device_id = qpd.device_id and qpd.question_id = qd.question_id
group by university, difficult_level;