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

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

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

真的很想爆粗口,这题本身没有难度,如果你做了前面几个题那这个题更应该是行云流水。

但是!!题意太模糊了!!在限制最近一个月时间上吃了大亏,题意所谓的最近一个月发布的视频指的并不是最大发布时间减29天,而是最大end_time和发布时间的差额是29天,也就是题中说的最大end_time是当前时间。看来别人的代码才搞明白。

而且这里建议预期输出请完整的正确的答案做参考,不要随时改变!不同的错误最终显示不同的预期输出就没有参考价值了只能误导答题者。

下面是正确的代码,主要思路就三步:

第一步:T1表计算所需要的参数

第二步:限制T1表中的取值时间(最近一个月) DATEDIFF((select max(end_time) from tb_user_video_log), t2.release_time) <= 29

第三步:T2表匹配全部视频的最大播放时间,也就是当前时间

SELECT 
T1.video_id,
ROUND((100*T1.完播率+5*T1.点赞数+3*T1.评论数+2*T1.转发数)/(datediff(T2.最大视频时间,T1.单视频最近时间)+1),0) AS hot_index
FROM
    (
        -- 取出进一个月发布的视频的:点赞数,评论数,转发数,完播率,单视频最近播放时间
        select 
        t1.video_id,
        sum(t1.if_like) as 点赞数,
        count(t1.comment_id) as 评论数,
        sum(t1.if_retweet) as 转发数,
        max(date(t1.end_time)) 单视频最近时间,
        avg(if(TIMESTAMPDIFF(SECOND,t1.start_time,t1.end_time)>=t2.duration,1,0)) as 完播率
        from tb_user_video_log as t1
        left join tb_video_info as t2
        on t1.video_id = t2.video_id
        where DATEDIFF((select max(end_time) from tb_user_video_log), t2.release_time) <= 29
        group by t1.video_id
    ) T1

    left join
    (   -- 匹配全部视频的最大播放时间
        select
        video_id,
        date(end_time) as 单视频最近时间,
        max(date(end_time)) over() as 最大视频时间
        from tb_user_video_log 
    ) T2
    on T1.video_id = T2.video_id and T1.单视频最近时间= T2.单视频最近时间
ORDER BY hot_index DESC
LIMIT 3


全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
10-15 15:00
潍坊学院 golang
跨考小白:这又不是官方
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务