题解 | #国庆期间每类视频点赞量和转发量#

国庆期间每类视频点赞量和转发量

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


新知识点:

  • 滑动窗口:sum、avg、count、max、min ➕ () over (),聚合函数在窗口函数中,是对自身记录、及位于自身记录以上的数据进行求和的结果。类似滑动窗口的效果。
    从date_time开始往前推6天的总和(近7天):
    sum() over (order by date_time rows 6 preceding)
  • 窗口函数:
    <窗口函数> over(partition by<用于分组的列名> order by<用于排列的列名>)
    适用于函数:rank、dense_rank、row_number;
  • 自定义窗口:window [窗口名] as (patition by<用于分组的列名> order by<用于排列的列名>)

明确题意:
统计2021年国庆头3天每类视频每天的近一周总点赞量和一周内最大单天转发量,结果按视频类别降序、日期升序排序。假设数据库中数据足够多,至少每个类别下国庆头3天及之前一周的每天都有播放记录。


问题分解:

  • 计算每类视频每天的点赞量和转发量:
    • 关联表:tb_user_video_log left join tb_video_info using video_id
    • 筛选必要时间窗的数据:where date(start_time) between '2021-09-25' and '2021-10-03'
    • 每天的点赞量和转发量:sum(if_like) like_cnt;sum(if_retweet) retweet_cnt
  • 近七天汇总量:
    • 自定义窗口:每类视频每一天 window wd_tag_dt as(partition by tag order by dt desc)
    • 近一周总点赞量:sum(like_cnt) over (wd_tag_dt rows 6 preceding)
    • 近一周最大转发量:max(retweet_cnt) over (wd_tag_dt rows 6 preceding)
      select tag,dt,sum_like_cnt_7d,max_retweet_cnt_7d
      from(
      select tag,dt,
          sum(like_cnt) over (partition by tag order by dt rows 6 preceding) sum_like_cnt_7d,
          max(retweet_cnt) over (partition by tag order by dt rows 6 preceding) max_retweet_cnt_7d
      from
      (
          select 
              b.tag,
              date(start_time) dt,
              sum(if_like) like_cnt,
              sum(if_retweet) retweet_cnt
          from tb_user_video_log a 
          join tb_video_info b
          on a.video_id=b.video_id
          where date(start_time) 
          between '2021-09-25' and '2021-10-03'
          group by b.tag,date(start_time)
      )p
      )t
      where dt between '2021-10-01' and '2021-10-03'
      order by tag desc
全部评论

相关推荐

04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务