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

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

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

# 先找到2021/9/25到2021/10/03的数据
with t1 as (
    select b.tag, a.if_like, a.if_retweet, a.end_time
    from tb_user_video_log as a
    left join tb_video_info as b
    on a.video_id = b.video_id
    where a.end_time between '2021-09-25 00:00:00' and '2021-10-03 23:59:59'
),
t2 as (
    # 计算每一个类别每一天的点赞量以及转发量
    select date_format(end_time, '%Y-%m-%d') as day, tag, sum(if_like) as like_cnt, sum(if_retweet) as retweet_cnt
    from t1
    group by date_format(end_time, '%Y-%m-%d'), tag
),# 找到前一个周的总点赞量
t3 as (
    select tag, day as dt, sum(like_cnt) over(partition by tag rows between 6 preceding and current row) as sum_like_cnt_7d
    from t2
),
t4 as (
    select *
    from t3
    where dt >= '2021-10-01'
),
t5 as (
    # 计算单天最大转发量
    (select tag, '2021-10-01' as dt, max(retweet_cnt) as max_retweet_cnt_7d
    from (
        select *
        from t2
        where day <= '2021-10-01'
    ) as e
    group by tag)
    union all
    (select tag, '2021-10-02' as dt, max(retweet_cnt) as max_retweet_cnt_7d
    from (
        select *
        from t2
        where day <= '2021-10-02'
    ) as e
    group by tag)
    union all
    (select tag, '2021-10-03' as dt, max(retweet_cnt) as max_retweet_cnt_7d
    from (
        select *
        from t2
        where day <= '2021-10-03'
    ) as e
    group by tag)
)
select t4.tag, t4.dt, t4.sum_like_cnt_7d, t5.max_retweet_cnt_7d
from t4
left join t5
on t4.tag = t5.tag and t4.dt = t5.dt
order by t4.tag desc, t4.dt;

全部评论

相关推荐

05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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