SELECT
    u.device_id,
    u.university,
    COUNT(qp.id) question_cnt,
    SUM(IF(result = 'right', 1, 0)) right_question_cnt
FROM
    user_profile u
    LEFT JOIN question_practice_detail qp
    ON u.device_id = qp.device_id
    AND MONTH(qp.date) = 8
WHERE u.university = '复旦大学'
GROUP BY
    u.device_id

首先 user_profile 表左连接 question_practice_detail 表,将 8 月份的数据从中挑选出来,然后通过 university 筛选、device_id 分组,计算组内问题ID(qp.id)个数以及通过 SUM 计算 result 为 right 的个数。
这里用到了 IF 判断来将 right 转换成 1,否则为 0.