不敢相信,我居然自己写出了这么长的一段代码,我自己觉得太长了,想看下大佬们是如何解决的,一看居然思路差不多
题目:
复旦大学的每个用户在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;