题解 | 统计复旦用户8月练题情况
统计复旦用户8月练题情况
https://www.nowcoder.com/practice/53235096538a456b9220fce120c062b3
WITH FUDAN AS (
SELECT *
FROM user_profile
WHERE university = '复旦大学'
),
FUDAN_AUG AS (
SELECT
QPD.question_id,
FD.device_id,
QPD.result,
FD.university
FROM
FUDAN FD
LEFT JOIN
question_practice_detail QPD
ON FD.device_id = QPD.device_id
AND MONTH(QPD.date) = 8
)
SELECT
device_id,
university,
COUNT(question_id) AS question_cnt,
SUM(CASE
WHEN result = 'wrong' OR result IS NULL THEN 0
ELSE 1 END) AS right_question_cnt
FROM FUDAN_AUG
GROUP BY device_id
用WITH...AS()创建两个表
第一个表FUDAN:筛选出所有复旦大学的数据
第二个表FUDAN_AUG:用MONTH()筛选出所有8月的数据,并用LEFT JOIN()和第一个表链接
最后直接从第二个表SELECT对应字段,在筛选时用CASE...WHRN...ELSE解决没有练习题的人返回0的问题
这个方法虽然感觉有点麻烦,但是比较直观,留作参考
查看15道真题和解析