题解 | #近一个月发布的视频中热度最高的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


全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 17:09
点赞 评论 收藏
分享
Hakasee:我的简历和你的基本一样,上周去了上海,boss投了三百家, 三家线下面试 第一家没有做题,全是八股和项目,因为第一次面试不怎么熟练,挂了 第二家,给你几个题目(①css垂直居中文字,字体每两秒闪烁一下以及点击弹窗,②给你一个链接,实现可视化地图,③然后是八股,图片性能优化,以及对图片app有什么想法),45分钟内做完,然后老板面试) 第三家特别偏僻,有点阴森,到了之后让了一个工位给我,有四个题目,①格式化时间 年月日当前时间星期几② 正则表达式提取新闻文字,③在文本域输入文字生成选择题以及选项④生成商品排版还是什么来着 三家都是不超过50人的小公司 两家线上牛客笔试(卡伦特,七牛云,但是笔试不仅要考前端,还要考后端,算法,甚至数学题 我的建议是如果只做了这两个vue项目且不怎么熟练的情况下,先沉淀沉淀,把react学了,上海好的公司基本都是react查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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