# 现在运营想要了解复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况,请取出相应明细数据,对于在8月份没有练习过的用户,答题数结果返回0.
SELECT u.device_id, -- 用户设备 ID
u.university, -- 用户所在大学
COALESCE(SUM(q.result IS NOT NULL), 0) AS question_cnt, -- 总题目数,如果没有练习过则为 0
COALESCE(SUM(CASE WHEN q.result = 'right' THEN 1 ELSE 0 END), 0) AS right_question_cnt -- 回答正确的题目数,如果没有练习过则为 0
FROM user_profile u -- 从用户信息表中选取数据
LEFT JOIN (
SELECT device_id, result, date -- 从问卷练习表单中选取设备 ID、结果和日期
FROM question_practice_detail
WHERE MONTH(date) = 8 -- 筛选出日期为 8 月份的记录
) q ON u.device_id = q.device_id -- 以设备 ID 进行左连接
WHERE u.university = '复旦大学' -- 筛选出复旦大学的用户
GROUP BY u.device_id, u.university; -- 按照设备 ID 和大学进行分组