不敢相信,我居然自己写出了这么长的一段代码,我自己觉得太长了,想看下大佬们是如何解决的,一看居然思路差不多 题目: 复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况,请取出相应明细数据,对于在8月份没有练习过的用户,答题数结果返回0. 解决思路: 1)先找出复旦大学的用户id 2)再找出8月份回答问题的用户 3)拼接表了,这个时候,要特别注意题目要求,要求的是复旦大学所有用户在8月回答问题的情况,且没回答的也要列出来,显示0,所以复旦大学所有用户id的表就是主表,左连接8月回答问题的用户表 4)计算部分了 重点是计算回答正确的题目数,因为数据里都是wrong,right字符,所以得用case转换,再统计求和 select u1.device_id,u1.university,count(qpd.device_id) as question_cnt, sum(case when qpd.result='right' then 1 else 0 end) as right_question_cnt from (select device_id,university from user_profile where university = '复旦大学') as u1 left join (select device_id,result from question_practice_detail where month(date)='08') as qpd on u1.device_id=qpd.device_id group by u1.device_id;