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

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

题解: 如注释, 考察窗口函数的使用, 以及对sql执行顺序的理解


  • 需要注意的是: rows需要往前推6行(题目给出的条件是前7天都是连续的)
  • 第一次查询可以将时间限定为10.1往前推7天,以减少数据扫描
    select *
    from (
      select vi.tag,
          date(ul.start_time) as start_time,
          # 注意: 窗口函数和groupby可以同时使用, 但是窗口函数执行顺序在groupby之后
          # rows 3 preceding窗口向前便宜多少行
          sum(sum(ul.if_like)) over(partition by vi.tag order by date(ul.start_time) rows 6 preceding),
          max(sum(ul.if_retweet)) over(partition by vi.tag order by date(ul.start_time) rows 6 preceding)
      from tb_user_video_log ul
      join tb_video_info vi on ul.video_id=vi.video_id
      # 注意: 不能在where中用between '2021-10-01' and '2021-10-04', 这样窗口计算出来的只有这3天的值
      -- where ul.start_time between '2021-10-01' and '2021-10-04' 
      group by vi.tag, date(ul.start_time)
      order by vi.tag desc, date(ul.start_time)
    ) t1
    # 注意: between是包含左右边界的
    where t1.start_time >= '2021-10-01' and t1.start_time < '2021-10-04' 
全部评论

相关推荐

7 2 评论
分享
牛客网
牛客企业服务