题解 | #统计复旦用户8月练题情况# 个人笔记
统计复旦用户8月练题情况
https://www.nowcoder.com/practice/53235096538a456b9220fce120c062b3
这道题主要在对于在8月份没有练习过的用户,答题数结果返回0.
即:复旦大学所有用户8月的作答情况,包含没有作答过的。
除了使用left join 对两个表的数据进行链接,还需要考虑执行过程中 university = '复旦大学' 和 MONTH(date)=8 的先后情况
即:需要考虑复旦大学的学生在8月份刷题数为null值的情况。
根据解题区大佬笔记有以下几种解法:
1 b表连上a表,保留a表中的所有值,b表中保留8月份的数据,其余全为null值
2 筛选出复旦大学的学生后8月份的答题情况需要加入空值的存在。MONTH(t2.date)=8 OR t2.date IS NULL
- SELECT t1.device_id, t1.university,
- count(t2.question_id) AS question_cnt,
- sum(
- case
- when t2.result = 'right' then 1
- ELSE 0
- end
- ) AS right_question_cnt
- FROM user_profile AS t1
- LEFT JOIN question_practice_detail AS t2
- ON t1.device_id = t2.device_id
- WHERE t1.university = '复旦大学' AND ((MONTH(t2.date)=8 OR t2.date IS NULL ))
- GROUP BY device_id
第一种是把除了8月的值,其他月份全变成null值,第二种是筛选出8月的值和null值。
SQL解题笔记 文章被收录于专栏
记录解题过程中遇到的问题、出现的错误以及掌握不牢固的知识点