题解 | 在线教育平台活跃学员课程评价分析

在线教育平台活跃学员课程评价分析

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

WITH TargetUsers AS (
    -- 第一步:筛选出2025年3月完成 DS-102 的目标学员
    SELECT DISTINCT user_id
    FROM course_completions
    WHERE course_id = 'DS-102'
      AND left(completion_date,7) >= '2025-03' 
      
),
DS102_Ratings AS (
    -- 第二步:计算学员对 DS-102 这一门课的平均分
    SELECT user_id, AVG(rating) as avg_r
    FROM content_reviews
    WHERE course_id = 'DS-102'
    GROUP BY user_id
),
GlobalLatestReview AS (
    -- 第三步:计算学员在全球(不限课程)的最近评价日期
    SELECT user_id, MAX(review_date) as max_date
    FROM content_reviews
    GROUP BY user_id
)
-- 第四步:汇总结果并进行分类排序
SELECT 
    t.user_id,
    ROUND(COALESCE(r.avg_r, 0), 2) AS average_rating,
    CASE 
        WHEN COALESCE(r.avg_r, 0) >= 4.0 THEN '优质反馈学员'
        ELSE '普通反馈学员' 
    END AS feedback_type,
    DATE_FORMAT(l.max_date, '%Y-%m-%d') AS latest_review_date
FROM TargetUsers t
 JOIN DS102_Ratings r ON t.user_id = r.user_id
 JOIN GlobalLatestReview l ON t.user_id = l.user_id
ORDER BY 
    feedback_type desc, 
    average_rating DESC, 
    user_id ASC;

主要难点在于需要对齐颗粒度,颗粒度不同的需要cte分步骤解决,不限课程的最近评价日期和学员对 DS-102 这一门课的平均分颗粒度不一致,需要分别进行计算

全部评论

相关推荐

01-30 16:13
浙江大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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