题解 | 统计复旦用户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的问题

这个方法虽然感觉有点麻烦,但是比较直观,留作参考

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务