select
u.device_id,
u.university,
count(qpd.question_id) as question_cnt,
sum(case when qpd.result='right' then 1 else 0 end) as right_question_cnt
from
user_profile u
left join
question_practice_detail qpd
on
u.device_id=qpd.device_id
and month(qpd.date)=8
where
u.university='复旦大学'
group by
u.device_id,u.university;
select u.device_id, u.university, count(qpd.question_id) as question_cnt, sum(case when qpd.result='right' then 1 else 0 end) as right_question_cnt
:选择要查询的列,包括用户设备 ID、大学名称,统计用户回答问题的总数question_cnt
,以及回答正确的问题总数right_question_cnt
。其中right_question_cnt
通过case
语句判断回答结果是否为right
,如果是则记为 1,否则为 0,最后求和得到。from user_profile u left join question_practice_detail qpd on u.device_id=qpd.device_id and month(qpd.date)=8
:指定从user_profile
表(别名为u
)和question_practice_detail
表(别名为qpd
)进行数据获取,通过left join
连接这两张表,连接条件是用户设备 ID 相等且答题日期的月份为 8 月。where u.university='复旦大学'
:筛选出大学为 “复旦大学” 的用户数据。group by u.device_id,u.university
:按照用户设备 ID 和大学名称进行分组,以确保每个用户(按设备 ID 区分且同一大学)的数据统计是独立的。