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

  1. 计算每个视频的完播率,点赞数,评论数,转发数,新鲜度,生成子表a
  • 联结两张表:join using()
  • 完播率:判断时间差是否大于等于视频时长,if(timestampdiff(second,end_time,star_time)>=duration,1,0) sum(if(timestampdiff(second,star_time,end_time)>=duration,1,0))/count(*) as like_rate
  • 点赞数:sum(if_like) as like_cnt
  • 评论数:count(comment_id) as comment_cnt
  • 转发数:sum(if_retweet) as retweet_cnt
  • 新鲜度:
    • 新鲜度=1/(最近无播放天数+1)
    • 最近无播放天数***(卡在这里了)***
      • 现在的日期-最后一次播放的日期
        • 现在的日期:表中最大的日期
        • 最后一次播放的日期,按照video_id分组后,每组最大的日期
      • 或者是现在的日期-发布日期?(一次都没有播放过?)
      • if(start_time is null, datediff(max(date(start_time)),date(release_time)), datediff((select cur_day from t),max(date(start_time)) )
  • 条件:最近一个月,datediff(表的最大日期,发布日期)< 30
  • 分组:video_id
with t as (
select max(date(start_time)) as cur_day
from tb_user_video_log
)   
select 
    video_id,
    sum(if(timestampdiff(second,star_time,end_time)>=duration,1,0))/count(*) as like_rate,
    sum(if_like) as like_cnt,
    count(comment_id) as comment_cnt,
    sum(if_retweet) as retweet_cnt,
    1/(if(start_time is null,
             datediff(max(date(start_time)),date(release_time)),
             datediff((select cur_day from t),max(date(start_time))
            )+1) as fre
from tb_user_video_log 
left join tb_video_info using(video_id)
where datediff(select cur_day from t,release_time)<30
group by video_id
  1. 从子表中计算所需
    • 条件:无
    • 不用分组
    • 排序 :
    • limit 3
select 
    video_id,
    (100*like_rate+5*like_cnt+3*comment_cnt+2*retweet_cnt) as hot_index
from a
order by hot_index desc 
limit 3
  1. 代入
with t as (
select max(date(start_time)) as cur_day
from tb_user_video_log
)      
       
select 
    video_id,
    (100*like_rate+5*like_cnt+3*comment_cnt+2*retweet_cnt)*fre as hot_index
from(
    select 
        video_id,
        sum(if(timestampdiff(second,star_time,end_time)>=duration,1,0))/count(*) as like_rate,
        sum(if_like) as like_cnt,
        count(comment_id) as comment_cnt,
        sum(if_retweet) as retweet_cnt,
        1/(if(start_time is null,
                 datediff(max(date(start_time)),date(release_time)),
                 datediff((select cur_day from t),max(date(start_time)))+1) as fre
    from tb_user_video_log 
    left join tb_video_info using(video_id)
    where datediff(select cur_day from t,release_time)<30
    group by video_id
)a
order by hot_index desc 
limit 3

有人帮忙看下这个吗,不知道错在哪里

全部评论

相关推荐

12-07 10:09
复旦大学 Java
点赞 评论 收藏
分享
来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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