题解 | #验证刷题效果,输出题目真实通过率#

验证刷题效果,输出题目真实通过率

https://www.nowcoder.com/practice/c4fd4b545a704877b510f18503ad523f

WITH UserQuestionStats AS (
    -- 子查询部分,统计每个用户相关的指标基础数据
    SELECT
        user_id,
        -- 统计通过题目数量(去重,按照题目只计一次通过的逻辑)
        COUNT(DISTINCT CASE WHEN result_info = 1 THEN question_id END) AS passed_questions_distinct,
        -- 统计总题目数量(去重)
        COUNT(DISTINCT question_id) AS total_questions_distinct,
        -- 统计通过题目数量(不去重)
        SUM(CASE WHEN result_info = 1 THEN 1 ELSE 0 END) AS passed_questions_not_distinct,
        -- 统计总提交次数
        COUNT(*) AS total_submissions
    FROM
        done_questions_record
    GROUP BY
        user_id
)
-- 主查询,基于上面统计好的数据计算比率并筛选结果
SELECT
    user_id,
    -- 计算题目通过率
    passed_questions_distinct / total_questions_distinct AS question_pass_rate,
    -- 计算提交正确率
    passed_questions_not_distinct / total_submissions AS pass_rate,
    -- 计算每题目平均提交次数
    total_submissions / total_questions_distinct AS question_per_cnt
FROM
    UserQuestionStats
WHERE
    passed_questions_distinct / total_questions_distinct > 0.6
ORDER BY
    user_id ASC;

理解题意实在太困难了,可见程序员和产品经理之间的Gap有多大~

由于运算逻辑较为复杂,建议使用公共表达式(common table expressions)来提高代码可读性和可维护性

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-05 15:27
点赞 评论 收藏
分享
05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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