select
a.device_id
,b.university
,count(a.question_id) as question_cnt
,sum(if(a.result = 'right', 1, 0)) as right_question_cnt
from question_practice_detail a
left join user_profile b
on a.device_id = b.device_id 
where university = '复旦大学'
and left(a.date, 7) = '2021-08'
group by a.device_id

union all

select
b.device_id
,b.university
,0 as question_cnt
,0 as right_question_cnt
from question_practice_detail a
right join user_profile b
on a.device_id = b.device_id 
where university = '复旦大学'
and a.device_id is null




一个b站up主的思路