自认为最清晰简单的逻辑 #国庆期间每类视频点赞量和转发量#

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

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

-- 由于时间是连续的 所以可以使用开窗函数
select  -- 外层查询主要为了限制 只提取国庆开始的前三天
*
from
    (-- 子查询中计算了所有日期的近一周的点赞总数和最大的日转发数量
    select
    t2.tag,
    date(start_time) as dt,
    -- 里层sum计算每天加和,外部sum/max计算规定分区内的加和或最大 ->  date(start_time) rows between 6 preceding and current row 当前行以及之前六天
    sum(sum(if_like)) over (partition by t2.tag order by date(start_time) rows between 6 preceding and current row) as sum_like_cnt_7d,
    max(sum(if_retweet)) over (partition by t2.tag order by date(start_time) rows between 6 preceding and current row) as max_retweet_cnt_7d
    from tb_user_video_log as t1
    left join tb_video_info as t2
    on t1.video_id = t2.video_id
    group by t2.tag,dt
    order by t2.tag desc , dt asc
    ) as t3
where dt between '2021-10-01' and '2021-10-03'

其实代码比较简单

里层函数计算每天的近一周的点赞累计数量和最大日点赞数

外层只限制一下时间是国庆节的前三天即可

主要难点在于对窗口函数的使用:

利用date(start_time) rows between 6 preceding and current row 限制当前日期的前六天以及当天(共7天)即可。

全部评论

相关推荐

邮小鼠:粤嵌的项目水的要死 来我们学校带过课程实习 项目名字是车机终端 实际上就是写了了个gui 还是老师把代码发给你你改改的那种
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务