数仓经典案例-各个视频平均完播率、平均播放进度

这篇具有很好参考价值的文章主要介绍了数仓经典案例-各个视频平均完播率、平均播放进度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数仓经典案例-各个视频平均完播率、平均播放进度

数仓经典案例-各个视频平均完播率、平均播放进度

问题1:计算2021年里有播放记录的每个视频的完播率(结果保留三位小数),并按完播率降序排序

注:视频完播率是指完成播放次数占总播放次数的比例。简单起见,结束观看时间与开始播放时间的差>=视频时长时,视为完成播放。

DROP TABLE IF EXISTS tb_user_video_log, tb_video_info;
CREATE TABLE tb_user_video_log (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid INT NOT NULL COMMENT '用户ID',
    video_id INT NOT NULL COMMENT '视频ID',
    start_time datetime COMMENT '开始观看时间',
    end_time datetime COMMENT '结束观看时间',
    if_follow TINYINT COMMENT '是否关注',
    if_like TINYINT COMMENT '是否点赞',
    if_retweet TINYINT COMMENT '是否转发',
    comment_id INT COMMENT '评论ID'
) CHARACTER SET utf8 COLLATE utf8_bin;

CREATE TABLE tb_video_info (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    video_id INT UNIQUE NOT NULL COMMENT '视频ID',
    author INT NOT NULL COMMENT '创作者ID',
    tag VARCHAR(16) NOT NULL COMMENT '类别标签',
    duration INT NOT NULL COMMENT '视频时长(秒数)',
    release_time datetime NOT NULL COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_bin;

INSERT INTO tb_user_video_log(uid, video_id, start_time, end_time, if_follow, if_like, if_retweet, comment_id) VALUES
  (101, 2001, '2021-10-01 10:00:00', '2021-10-01 10:00:30', 0, 1, 1, null),
  (102, 2001, '2021-10-01 10:00:00', '2021-10-01 10:00:24', 0, 0, 1, null),
  (103, 2001, '2021-10-01 11:00:00', '2021-10-01 11:00:34', 0, 1, 0, 1732526),
  (101, 2002, '2021-09-01 10:00:00', '2021-09-01 10:00:42', 1, 0, 1, null),
  (102, 2002, '2021-10-01 11:00:00', '2021-10-01 11:00:30', 1, 0, 1, null);

INSERT INTO tb_video_info(video_id, author, tag, duration, release_time) VALUES
  (2001, 901, '影视', 30, '2021-01-01 7:00:00'),
  (2002, 901, '美食', 60, '2021-01-01 7:00:00'),
  (2003, 902, '旅游', 90, '2021-01-01 7:00:00');

答案:

select a.video_id,round(sum(if(end_time-start_time>=duration,1,0))/count(start_time),3) as avg_comp_play_rate
from tb_user_video_log a left join tb_video_info b on a.video_id=b.video_id 
where year(start_time)=2021
group by a.video_id 
order by avg_comp_play_rate desc 

数仓经典案例-各个视频平均完播率、平均播放进度
问题2:计算各类视频的平均播放进度,将进度大于60%的类别输出。

注:
播放进度=播放时长÷视频时长*100%,当播放时长大于视频时长时,播放进度均记为100%。
结果保留两位小数,并按播放进度倒序排序。

SELECT tag,
        concat(round(avg(case
    WHEN timestampdiff(second,start_time,end_time) >= duration THEN
    1
    ELSE (timestampdiff(second,start_time,end_time)/duration) end)*100,2),'%') AS avg_play_progress
FROM tb_user_video_log a
LEFT JOIN tb_video_info b
    ON a.video_id=b.video_id
GROUP BY  tag
HAVING substring_index(avg_play_progress,'%',1) > 60
ORDER BY  avg_play_progress DESC 

数仓经典案例-各个视频平均完播率、平均播放进度
问题3:统计在有用户互动的最近一个月(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)中,每类视频的转发量和转发率(保留3位小数)。

注:转发率=转发量÷播放量。结果按转发率降序排序。

SELECT tag,
        sum(if_retweet) AS retweet_cut,
        round(sum(if_retweet)/count(*),
        3) AS retweet_rate
FROM tb_user_video_log a
LEFT JOIN tb_video_info b
    ON a.video_id=b.video_id
WHERE datediff(date(
    (SELECT max(start_time)
    FROM tb_user_video_log)),date(start_time))<=29
GROUP BY  tag 

数仓经典案例-各个视频平均完播率、平均播放进度
问题4:计算2021年里每个创作者每月的涨粉率及截止当月的总粉丝量

注:
涨粉率=(加粉量 - 掉粉量) / 播放量。结果按创作者ID、总粉丝量升序排序。
if_follow-是否关注为1表示用户观看视频中关注了视频创作者,为0表示此次互动前后关注状态未发生变化,为2表示本次观看过程中取消了关注。

SELECT author,
        date_format(start_time,'%Y-%m') AS month ,
        round(sum(case WHEN if_follow=2 THEN -1 ELSE if_follow end)/count(author),3) AS fans_growth_rate ,
        sum(sum(case WHEN if_follow=2 THEN -1 ELSE if_follow end))over(partition by author ORDER BY  date_format(start_time,'%Y-%m')) total_fans
FROM tb_user_video_log a
LEFT JOIN tb_video_info b
    ON a.video_id=b.video_id
WHERE year(start_time)=2021
GROUP BY  author,month
ORDER BY  author,total_fans 

数仓经典案例-各个视频平均完播率、平均播放进度
*问题5:统计2021年国庆头3天每类视频

每天的近一周总点赞量和一周内最大单天转发量

,结果按视频类别降序、日期升序排序。假设数据库中数据足够多,至少每个类别下国庆头3天及之前一周的每天都有播放记录。*

SELECT *
FROM 
    (SELECT tag,
         dt,
         sum(like_cnt)
        OVER w AS sum_like_cnt_7d, max(retweet_cnt)
        OVER w AS max_retweet_cnt_7d
    FROM 
        (SELECT tag,
        date(start_time) dt,
        sum(if_like) like_cnt,
        sum(if_retweet) retweet_cnt
        FROM tb_user_video_log a
        LEFT JOIN tb_video_info b
            ON a.video_id=b.video_id
        GROUP BY  1,2)t1 
        #窗口函数 窗口范围:当前行和后六行
        WINDOW w AS (partition by tag ORDER BY  dt DESC rows BETWEEN current row
                AND 6 following)) t2
    GROUP BY  1,2
HAVING dt
    BETWEEN '2021-10-01'
        AND '2021-10-03'
ORDER BY  1 desc, 2 asc

问题6:找出近一个月发布的视频中热度最高的top3视频。

注:
热度=(a视频完播率+b点赞数+c评论数+d转发数)*新鲜度;
新鲜度=1/(最近无播放天数+1);
当前配置的参数a,b,c,d分别为100、5、3、2。
最近播放日期以end_time-结束观看时间为准,假设为T,则最近一个月按[T-29, T]闭区间统计。
结果中热度保留为整数,并按热度降序排序。

select 
    video_id,
    round((100*avg_comp_play_rate+5*like_cnt+3*comment_cnt+2*retweet_cnt)*(1/(unfinished_day_cnt+1))) hot_index
from(
    select video_id,
        sum(case when timestampdiff(second,start_time,end_time)>=duration then 1 else 0 end)/count(start_time) as avg_comp_play_rate,
        sum(if_like) like_cnt,
        sum(if_retweet) retweet_cnt,
        sum(if(comment_id is not null,1,0)) comment_cnt,
        datediff(date((select max(end_time) from tb_user_video_log)),max(date(end_time))) unfinished_day_cnt
    from tb_video_info a  join tb_user_video_log b using(video_id)
    where datediff(date((select max(end_time) from tb_user_video_log)),date(release_time))<=29
    group by 1    
) t1 group by 1 order by hot_index desc 
limit 3

数仓经典案例-各个视频平均完播率、平均播放进度文章来源地址https://www.toymoban.com/news/detail-421026.html

到了这里,关于数仓经典案例-各个视频平均完播率、平均播放进度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 路由器故障排错三大经典案例

    对于网络管理员来说,熟悉与掌握路由排错的思路和技巧是非常必要的。小编将通过三例典型的路由故障排错案例进行分析。 案例1 不堪重负,路由器外网口关闭 1、网络环境 某单位使用的是Cisco路由器,租用电信30MB做本地接入和l0MB教育网双线路上网,两年来网络运行稳定,

    2024年02月05日
    浏览(36)
  • 国内外大数据经典案例研究

    大数据时代的来临使得产生的数据量呈爆炸式增长,各行各业均面临着海量数据的分析、处理问题。如何运用大数据技术从海量数据中挖掘出有价值的信息,将是今后企业发展的一个巨大挑战。点评收集研究了国内外大数据应用的经典案例,希望可以对读者有所启示。 1 、塔

    2024年02月05日
    浏览(62)
  • 经典智能合约案例之发红包

    角色分析:发红包的人和抢红包的人 功能分析: 发红包:发红包的功能,可以借助构造函数实现,核心是将ether打入合约; 抢红包:抢红包的功能,抢成功需要一些断言判断,核心操作是合约转账给抢红包的人; 退还:当红包有剩余的时候,允许发红包的人收回余额,可以

    2024年02月07日
    浏览(32)
  • MySQL学习指南&笔记&经典案例句

    该文章是一篇关于MySQL的一个学习的笔记或是指南,该文章中有很多的经典的案例可进行相应的练习和参考,后期的话会持续更新关于数据库系统方面的文章。 关于综合案例的话可以对该篇文章进行查阅和学习也附加了相应的问题和sql句: MySQL综合应用练习(直接拷贝到自己空

    2024年02月05日
    浏览(33)
  • Python递归的几个经典案例

    当我们碰到诸如需要求阶乘或斐波那契数列的问题时,使用普通的循环往往比较麻烦,但如果我们使用递归时,会简单许多,起到事半功倍的效果。这篇文章主要和大家分享一些和递归有关的经典案例,结合一些资料谈一下个人的理解,也借此加深自己对递归的理解和掌握一

    2024年02月05日
    浏览(31)
  • 阿里后端开发:抽象建模经典案例

    在互联网行业,软件工程师面对的产品需求大都是以具象的现实世界事物概念来描述的,遵循的是人类世界的自然语言,而软件世界里通行的则是机器语言,两者间跨度太大,需要一座桥梁来联通,抽象建模便是打造这座桥梁的关键。基于抽象建模,不断地去粗取精,从现实

    2024年02月09日
    浏览(55)
  • 【入门Flink】- 02Flink经典案例-WordCount

    需求:统计一段文字中,每个单词出现的频次 基本思路:先逐行读入文件数据,然后将每一行文字拆分成单词;接着按照单词分组,统计每组数据的个数。 1.1.数据准备 resources目录下新建一个 input 文件夹,并在下面创建文本文件words.txt words.txt 1.2.代码编写 打印结果如下:(

    2024年02月06日
    浏览(44)
  • C++动态规划经典案例解析之合并石子

    区间类型问题,指求一个数列中某一段区间的值,包括求和、最值等简单或复杂问题。此类问题也适用于动态规划思想。 如 前缀和 就是极简单的区间问题。如有如下数组: 现给定区间信息 [3,6] ,求区间内所有数字相加结果。即求如下图位置数字之和。 Tips: 区间至少包括

    2024年02月11日
    浏览(30)
  • C#中的反射(Reflection)使用经典案例

    C#中的反射(Reflection)是.NET框架提供的一种强大的运行时元编程机制,它允许程序在运行时获取类型信息、创建对象实例、调用方法、访问字段和属性等,而这些操作在编译时可能是未知的。以下是几个使用反射的典型场景: 1. 动态加载和调用类的方法 假设有一个库包含多

    2024年02月02日
    浏览(34)
  • 手搭手Ajax经典基础案例省市联动

    环境介绍 技术栈 springboot+mybatis-plus+mysql 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 pom.xml application.yml配置文件 数据库表 MybatisX逆向工程 逆向工程:通过数据库表接口,逆向生成java工程结构 实体类、mapper接口、mapper映射文件、Service接口、serv

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包