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.