题解 | 统计复旦用户8月练题情况
统计复旦用户8月练题情况
https://www.nowcoder.com/practice/53235096538a456b9220fce120c062b3
SELECT
u.device_id,
u.university,
COALESCE(COUNT(q.result), 0) AS question_cnt,
COALESCE(SUM(CASE WHEN q.result = 'right' THEN 1
ELSE 0 END),
0) AS right_question_cnt
FROM user_profile u
LEFT JOIN question_practice_detail q
ON u.device_id = q.device_id
AND DATE_FORMAT(q.date, '%Y-%m') = '2021-08'
WHERE u.university = '复旦大学'
GROUP BY u.device_id,u.university
ORDER BY u.device_id ASC;
有两个重点:
1.用COALESCE(·, 0)将不存在答题记录的用户记为0,如果不加的话会出现NULL值;
2.为了保留全部目标用户(即使无记录),要用user_profile LEFT JOIN question_practice_detail。
