SELECT
t1.device_id,
t1.university,
COUNT(t1.question_id) AS question_cnt,
SUM(result_1) AS right_question_cnt
FROM
(SELECT
-- 有重复字段名id,这里应该避免全选,否则后面会出现duplicate_columns错误
u.device_id,
u.university,
d.question_id,
d.result,
d.date,
-- 把答错的记为0,答对的记为1,便于后面进行right_question_cnt的计算
CASE WHEN result = 'wrong' THEN 0
WHEN result = 'right' THEN 1
END AS result_1
FROM user_profile u
JOIN question_practice_detail d USING(device_id)) AS t1
-- 只需要计算复旦8月的答题情况
WHERE t1.university = '复旦大学' AND MONTH(t1.date) = 8
GROUP BY t1.device_id
UNION
SELECT
t2.device_id, t2.university,
t2.question_cnt, t2.right_question_cnt
FROM
(SELECT
u.device_id,
u.university,
d.question_id,
d.result,
d.date,
CASE WHEN question_id IS NULL THEN 0
END AS question_cnt,
CASE WHEN question_id IS NULL THEN 0
END AS right_question_cnt
FROM user_profile u
LEFT JOIN question_practice_detail d USING(device_id)
-- 统计未回答问题的复旦用户情况
WHERE u.university = '复旦大学' AND question_id IS NULL) AS t2;