问题分解:
- 限定条件:需要是复旦大学的(来自表user_profile.university),8月份练习情况(来自表question_practice_detail.date)
- 从date中取month:用month函数即可;
- 总题目:count(question_id)
- 正确的题目数:
sum(if(qpd.result='right', 1, 0))
大学:‘复旦大学’as university
- 按列聚合:需要输出每个用户的统计结果,因此加上
group by up.device_id
细节问题:
- 8月份没有答题的用户输出形式:题目要求『对于在8月份没有练习过的用户,答题数结果返回0』因此明确使用left join即可,即输出up表中复旦大学的所有用户,如果8月没有练习记录,输出0就好了
select *
/*u.device_id,
'复旦大学' as university,
count(question_id) as question_id,
sum(if(q.result='right',1,0)) as right_question_cnt*/
from user_profile u
LEFT JOIN question_practice_detail q
on u.device_id=q.device_id and month(q.date)=8
where u.university='复旦大学'
运行结果如下图,左连接
本题代码
select
u.device_id,
'复旦大学' as university,
count(question_id) as question_id,
sum(if(q.result='right',1,0)) as right_question_cnt
from user_profile u
LEFT JOIN question_practice_detail q
on u.device_id=q.device_id and month(q.date)=8
where u.university='复旦大学'
group by u.device_id