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())嵌套加入新的列
最后
注意时间和大学帅选不能混在一起,避免丢失数据,最好在表连接时把时间帅选