题解 | 近一个月发布的视频中热度最高的top3视频;

近一个月发布的视频中热度最高的top3视频

https://www.nowcoder.com/practice/0226c7b2541c41e59c3b8aec588b09ff

SELECT
    t2.video_id,
    CAST((100*t2.finish_rate + 5*t2.like_count + 3*t2.comment_count + 2*t2.retweet_count) * t2.fresh AS SIGNED) AS hot_index
FROM
    (
        SELECT
            t1.video_id,
            global_max_date.max_date,
            1 / (DATEDIFF(global_max_date.max_date,MAX(DATE(t1.end_time))) + 1) AS fresh,
            SUM(t1.if_finish) / COUNT(1) AS finish_rate,
            SUM(t1.if_like) AS like_count,
            COUNT(t1.comment_id) AS comment_count,
            SUM(t1.if_retweet) AS retweet_count
        FROM
            (
                SELECT
                    tblog.video_id,
                    tbinfo.release_time,
                    tblog.start_time,
                    tblog.end_time,
                    tblog.if_like,
                    tblog.if_retweet,
                    tblog.comment_id,
                    IF(TIMESTAMPDIFF(SECOND,tblog.start_time,tblog.end_time) >= tbinfo.duration, 1, 0) AS if_finish
                FROM
                    tb_user_video_log tblog
                JOIN tb_video_info tbinfo ON tblog.video_id = tbinfo.video_id
            ) t1
        CROSS JOIN (
            SELECT MAX(DATE(end_time)) AS max_date
            FROM tb_user_video_log
        )global_max_date
        WHERE DATE(t1.release_time) BETWEEN DATE_SUB(global_max_date.max_date,INTERVAL 29 DAY) AND global_max_date.max_date 
        GROUP BY video_id,global_max_date.max_date  -- 确保GROUP BY包含所有非聚合列
    ) t2
ORDER BY hot_index DESC
LIMIT 3;

无需开窗,使用最简单的思路

全部评论

相关推荐

面了100年面试不知...:头像换成柯南再试试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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