自认为最清晰简单的逻辑 #国庆期间每类视频点赞量和转发量#
国庆期间每类视频点赞量和转发量
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天)即可。