现有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)——国庆期间每类视频点赞量和转发量相关推荐

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

    国庆期间每类视频点赞量和转发量 题目链接 描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_l ...

  2. 牛客网 SQL大厂面试真题篇 SQL5 国庆期间每类视频点赞量和转发量

    描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet commen ...

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

    用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet comment_i ...

  4. 牛客网SQL刷题二-某音短视频

    SQL1 各个视频的平均完播率 数据 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video ...

  5. 【友盟+】国庆假期旅游类APP使用报告(下)

    往期回顾: [友盟+]国庆假期旅游类APP使用报告(上) [友盟+]国庆假期旅游类APP使用报告(中) 旅游类APP用户国庆应用使用情况 国庆期间应用手游使用分布 国庆节期间,用户使用应用与手游类别与 ...

  6. sessionid会被拦截吗_抖音上热门的推荐机制是什么?抖音精选机制是什么?抖音模仿类视频会被消重机制拦截吗?...

    一,流量池机制(去中心化) 抖音的流量是去中心化的,哪怕粉丝数量为0,抖动系统也会为发布的视频智能分发几十上百的流量,也就是所谓的流量池,然后根据你在这个流量池里的表现 决定要不要把你的作品推送给更多 ...

  7. 搞笑类视频动画怎么制作?这个工具一定用得上 | 万彩动画大师

    搞笑类动画短视频诙谐幽默,轻松欢快,内容丰富,受到许多人的青睐.MG视频动画制作的搞笑类短视频传播速度快,点击量和转发量都很优秀,想制作优秀的搞笑类动画短视频,需充分发挥MG动画的特点和优势. 一.M ...

  8. 【视频课】android studio物联网APP设计制作全套教程--国庆期间全掌握

    用心的同学们在国庆期间,还是留足了学习的时间充电. 作者为国庆期间还在努力学习的你提供物联网技能提升选项. 如何做到物联网产品全栈交付? 关键环节之一就是物联网APP的设计制作. 如何学习物联网APP ...

  9. 牛客网SQL大厂真题—SQL158:每类视频近一个月的转发量/率

    描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet commen ...

最新文章

  1. SCAN Learning to Classify Images without Labels(翻译)
  2. AI芯片大战已然打响,国内外巨头抢占万亿智能家居市场
  3. IOS支付宝集成一系列问题
  4. Mongo Windows 基本使用入门
  5. golang实现聊天室(二)
  6. python 截取字符串6位,python按照指定字符或者长度 截取字符串
  7. java原生的ajax怎么写,用原生js实现 ajax方法
  8. 想进入互联网公司,怎能不知道互联网的技术架构!
  9. (数据库篇) SQL查询~ 存在一个表而不在另一个表中的数据
  10. 图纸管理软件保证图纸最新版本正确方法
  11. 计算机网络-第一章测试题及答案
  12. 如何用两个栈实现一个队列?
  13. 利用企业微信机器人发送GitLab消息
  14. SSM+中小型企业绩效管理系统毕业设计-附源码081536
  15. 2021-2025年中国服装合同制造的物流行业市场供需与战略研究报告
  16. redhat oracle 12c 安装图解,RedHat 7 静默安装Oracle 12c
  17. MySQL 用户权限详细汇总
  18. vb.net 教程 3-4 窗体编程 公共控件6 PictureBox ProgressBar
  19. github unable to access 'https://github.com/...: Failed to connect to github.com port 443‘
  20. python实现人民币金额大写转小写数字

热门文章

  1. 人脸姿态估计(计算欧拉角)
  2. 每日分享html之3个logo、1个背景、1个button
  3. Ceph对象存储(rgw)的IPv6环境配置
  4. 【WiFi破解】WiFi密码不知道了怎么办,一行代码轻松破解
  5. modbus rtu 调试软件_一文最全解读Modbus 的RTU、ASCII、TCP
  6. 基于微信小程序的设备报修系统源码
  7. 强化学习基础(第一周)笔记和代码(RL-cousera)
  8. 毕设--自动浇花系统的设计
  9. pandas判断标称型和数值型特征数据
  10. 由index为timestamp的数据获取股票集合竞价数据