SQL实战(2)——国庆期间每类视频点赞量和转发量
现有tb_user_video_log表如下:
tb_video_info表如下:
问题:统计2021年国庆头3天每类视频每天的近一周总点赞量和一周内最大单天转发量,结果按视频类别降序、日期升序排序。假设数据库中数据足够多,至少每个类别下国庆头3天及之前一周的每天都有播放记录。
先直接上代码。。。
SELECT tag,dt,total_like,max_retweet,retweet_cnt FROM
(WITH t1 as (SELECT tag,DATE(start_time) dt,sum(if_like) `like`,sum(if_retweet) retweetFROM tb_user_video_log left JOIN tb_video_info using(video_id)GROUP BY tag,dt)
SELECT *,sum(`like`) over w total_like,max(retweet) over w max_retweet
FROM t1
WINDOW w as (PARTITION by tag ORDER BY dt range BETWEEN interval 6 day preceding and CURRENT ROW)
ORDER BY tag DESC,dt ASC) t2
WHERE dt BETWEEN '2021-10-01' AND '2021-10-03'
思路:
1.先按视频类别tag和视频播放日期dt归类每类视频每天的点赞数和转发数:
SELECT tag,DATE(start_time) dt,sum(if_like) `like`,sum(if_retweet) retweet
FROM tb_user_video_log left JOIN tb_video_info using(video_id)
GROUP BY tag,dt
2.用一个滑动窗口函数计算当前日期及之前6天(共7天)之内的点赞数值和,最大单日转发量:
# 7日总点赞数
sum(`like`) over w total_like
# 7日内单日最大转发量
max(retweet) over w max_retweet
# 引出一个滑动窗口,窗口范围:当前行日期6天的行前到当前行,该语句写在from语句后方
window w as (PARTITION by tag ORDER BY dt range BETWEEN interval 6 day preceding and CURRENT ROW)
3.最后写上题目中要求的排序和对日期的限制即可;
知识点总结:
Mysql 8 之后的版本多了一个窗口函数,功能比较强大,先说语法:
[窗口函数] over(partition by [col_A] order by [col_B] range/rows between [expr_a] and [expr_b] )
partition by 和 order by 关键词比较简单,不做赘述
如果第三个关键词为ROWS:
通常使用 ROWS between [expr_a] and [expr_b]语法来表示行范围,其中[expr_a] and [expr_b]可以是:
CURRENT ROW 边界是当前行
UNBOUNDED PRECEDING 边界是分区中的第一行
UNBOUNDED FOLLOWING 边界是分区中的最后一行
x PRECEDING 边界是当前行前x行的值
x FOLLOWING 边界是当前行后x行的值
比如,下面都是合法的范围:
rows BETWEEN 1 PRECEDING AND 1 FOLLOWING 窗口范围是当前行、前一行、后一行一共三行记录。
rows UNBOUNDED Preceding 窗口范围是f分区第一行到当前行。
rows BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 窗口范围是当前分区中所有行,等同于不写。
如果第三个关键词为range:
和基于行类似,但当order by后面的[col_B]列为date类数据时,需要加range后面的区间里用(interval x unit),例如:range between INTERVAL 10 DAY PRECEDING and INTERVAL 5 DAY PRECEDING,表示日期在[n-10,n+5]范围内的所有值。
还有一点,可以用window关键词引导出一个窗口,用法类似with引导出一个子查询,例如:
window w as (PARTITION by tag ORDER BY dt range BETWEEN interval 6 day preceding and CURRENT ROW)
# 引出一个滑动窗口,窗口范围:当前行日期6天的行前到当前行,该语句写在from语句后方
SQL实战(2)——国庆期间每类视频点赞量和转发量相关推荐
- 国庆期间每类视频点赞量和转发量
国庆期间每类视频点赞量和转发量 题目链接 描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_l ...
- 牛客网 SQL大厂面试真题篇 SQL5 国庆期间每类视频点赞量和转发量
描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet commen ...
- MySQL 国庆期间每类视频点赞量和转发量
用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet comment_i ...
- 牛客网SQL刷题二-某音短视频
SQL1 各个视频的平均完播率 数据 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video ...
- 【友盟+】国庆假期旅游类APP使用报告(下)
往期回顾: [友盟+]国庆假期旅游类APP使用报告(上) [友盟+]国庆假期旅游类APP使用报告(中) 旅游类APP用户国庆应用使用情况 国庆期间应用手游使用分布 国庆节期间,用户使用应用与手游类别与 ...
- sessionid会被拦截吗_抖音上热门的推荐机制是什么?抖音精选机制是什么?抖音模仿类视频会被消重机制拦截吗?...
一,流量池机制(去中心化) 抖音的流量是去中心化的,哪怕粉丝数量为0,抖动系统也会为发布的视频智能分发几十上百的流量,也就是所谓的流量池,然后根据你在这个流量池里的表现 决定要不要把你的作品推送给更多 ...
- 搞笑类视频动画怎么制作?这个工具一定用得上 | 万彩动画大师
搞笑类动画短视频诙谐幽默,轻松欢快,内容丰富,受到许多人的青睐.MG视频动画制作的搞笑类短视频传播速度快,点击量和转发量都很优秀,想制作优秀的搞笑类动画短视频,需充分发挥MG动画的特点和优势. 一.M ...
- 【视频课】android studio物联网APP设计制作全套教程--国庆期间全掌握
用心的同学们在国庆期间,还是留足了学习的时间充电. 作者为国庆期间还在努力学习的你提供物联网技能提升选项. 如何做到物联网产品全栈交付? 关键环节之一就是物联网APP的设计制作. 如何学习物联网APP ...
- 牛客网SQL大厂真题—SQL158:每类视频近一个月的转发量/率
描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet commen ...
最新文章
- SCAN Learning to Classify Images without Labels(翻译)
- AI芯片大战已然打响,国内外巨头抢占万亿智能家居市场
- IOS支付宝集成一系列问题
- Mongo Windows 基本使用入门
- golang实现聊天室(二)
- python 截取字符串6位,python按照指定字符或者长度 截取字符串
- java原生的ajax怎么写,用原生js实现 ajax方法
- 想进入互联网公司,怎能不知道互联网的技术架构!
- (数据库篇) SQL查询~ 存在一个表而不在另一个表中的数据
- 图纸管理软件保证图纸最新版本正确方法
- 计算机网络-第一章测试题及答案
- 如何用两个栈实现一个队列?
- 利用企业微信机器人发送GitLab消息
- SSM+中小型企业绩效管理系统毕业设计-附源码081536
- 2021-2025年中国服装合同制造的物流行业市场供需与战略研究报告
- redhat oracle 12c 安装图解,RedHat 7 静默安装Oracle 12c
- MySQL 用户权限详细汇总
- vb.net 教程 3-4 窗体编程 公共控件6 PictureBox ProgressBar
- github unable to access 'https://github.com/...: Failed to connect to github.com port 443‘
- python实现人民币金额大写转小写数字