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

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

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

一、滑动窗口知识点补充

取值 说明 备注
CURRENT ROW
当前行
N PRECEDING 前N行 看了几个帖子说不包含本行,但根据另一位解题的博主说的以及自己试验应该是包含本行的,即前N+1行
UNBOUNDED PRECEDING 一直到第一行
N FOLLOWING 后N行
UNBOUNDED FOLLOWING
一直到最后一行
用法:求前M行到后N行之间的和(M+N+1行)
SUM(字段) OVER(PARTITION BY 字段 ORDER BY 字段 ROWS M PRECEDING AND N FOLLOWING)    

二、解题步骤

(一)查询出每类视频每天的点赞量和转发量,作为一个新表t1

WITH t1 AS
(SELECT tag, date_format(start_time, '%Y-%m-%d') dt, SUM(if_like) like_cnt, SUM(if_retweet) retweet_cnt
FROM tb_user_video_log tu
JOIN tb_video_info tv
ON tu.video_id = tv.video_id
GROUP BY tag, dt
ORDER BY tag, dt)
就是一个简单的分组函数及函数的使用,此时表t1的结构如下:

(二)使用滑动窗口,得到每类视频每天的近一周总点赞量和一周内最大单天转发量

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 t1
滑动窗口的用法第一部分已经讲了,得到的下表即为每类视频每天的近一周总点赞量和一周内最大单天转发量

(三)将(二)得到的作为表t2,取出国庆前三天的结果并进行排序就得到最终的结果啦

SELECT *
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 t1) t2
WHERE dt BETWEEN '2021-10-01' AND '2021-10-03'
ORDER BY tag DESC, dt

三、代码汇总

WITH t1 AS
(SELECT tag, date_format(start_time, '%Y-%m-%d') dt, SUM(if_like) like_cnt, SUM(if_retweet) retweet_cnt
FROM tb_user_video_log tu
JOIN tb_video_info tv
ON tu.video_id = tv.video_id
GROUP BY tag, dt
ORDER BY tag, dt)


SELECT *
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 t1) t2
WHERE dt BETWEEN '2021-10-01' AND '2021-10-03'
ORDER BY tag DESC, dt





#MySQL#
全部评论

相关推荐

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

创作者周榜

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