SELECT 
    up.device_id,
    up.university,
    sum(if(qpd.question_id is not null,1,0)) question_cnt,
    sum(if(qpd.result ='right',1,0)) right_question_cnt
FROM 
    user_profile up
LEFT JOIN 
    question_practice_detail qpd 
ON 
    up.device_id = qpd.device_id AND qpd.date LIKE '2021-08%'
    where university='复旦大学'
group by up.device_id

本题难点在于考察连接表,全连接则显示两张表共有数据(会损失我们的很大部分想要数据)

左连接显示给予大学同学的完成情况

右连接显示完成作业的大学同学情况

想明白这点之后。我们就可以用左连接得到一张基于某大学某同学的作业完成情况,

然后对某大学某同学某月完成情况进行表述,在这个基础上我觉得if语句逻辑最清晰,可用sum(if())嵌套加入新的列

最后

注意时间和大学帅选不能混在一起,避免丢失数据,最好在表连接时把时间帅选