当前题目我自己分为两步进行操作,根据预期的结果我们可以看到需要得到答题及答对题的数目,且按照用户的device_id进行分组,日期是8月份。这样我们就先针对question_practice_detail执行查询操作:
select device_id,count(*) question_cnt,
    sum(if(result='right',1,0)) right_question_cnt 
    from question_practice_detail where MONTH(date)='08' group by device_id
count(*) question_cnt,:每个人的总的答题数目
sum(if(result='right',1,0)) right_question_cnt:根据result的值判断答对题的数目
MONTH(date)='08':判断月份是8月
group by device_id:按照device_id分组
接下来对user_profile执行查询和如下所得的字表进行左外连查询,判断条件是device_id相等且university是复旦大学,因为有的人可能没有打过提,但是必须显示他的数据,因此需要使用ifnull函数
select aa.device_id,aa.university,IFNULL(bb.question_cnt,0),
IFNULL(bb.right_question_cnt,0) from user_profile aa left join (
    select device_id,count(*) question_cnt,
    sum(if(result='right',1,0)) right_question_cnt 
    from question_practice_detail where MONTH(date)='08' group by device_id) bb
    on aa.device_id=bb.device_id where aa.university='复旦大学'