做dm页网站,新渝网,锻件开发设计公司,优秀网站设计效果图各个视频的平均完播率
1、视频信息表
IDAuthorNameCategoryAgeStart Time1张三影视302024-01-01 7:00:002李四美食602024-01-01 7:00:003王麻子旅游902024-01-01 7:00:00
#xff08;video_id-视频ID, AuthorName-创作者, tag-类别标签, duration-视频时长#xff08;秒video_id-视频ID, AuthorName-创作者, tag-类别标签, duration-视频时长秒, release_time-发布时间2、视频互动表
IDGroupStart TimeEnd TimeStatusFlag1Flag2Value112024-06-01 10:00:002024-06-01 10:00:30011null212024-06-01 10:00:002024-06-01 10:00:24001null312024-06-01 11:00:002024-06-01 11:00:340101122024-09-01 10:00:002024-09-01 10:00:42101null222024-06-01 11:00:002024-06-01 11:00:30101null312024-06-01 12:00:002024-06-01 11:00:340101
uid-用户ID, video_id-视频ID, start_time-开始观看时间, end_time-结束观看时间, if_follow-是否关注, if_like-是否点赞, if_retweet-是否转发, comment_id-评论ID问题计算2024年里有播放记录的每个视频的完播率(结果保留三位小数)并按完播率降序排序 注视频完播率是指完成播放次数占总播放次数的比例。简单起见结束观看时间与开始播放时间的差视频时长时视为完成播放。
SQL实现过程
1、创建表和插入数据
CREATE TABLE dy_video_info (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,video_id INT UNIQUE NOT NULL COMMENT 视频ID,authorname VARCHAR(16) 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 utf8mb3_general_ci;INSERT INTO dy_video_info(video_id, authorname, tag, duration, release_time) VALUES(1, 张三, 影视, 31, 2024-01-01 7:00:00),(2, 李四, 美食, 65, 2024-01-01 7:00:00),(3, 王麻子, 搞笑, 90, 2024-01-01 7:00:00);CREATE TABLE dy_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 utf8mb3_general_ci;INSERT INTO dy_user_video_log(uid, video_id, start_time, end_time, if_follow, if_like, if_retweet, comment_id) VALUES(1, 1, 2024-06-01 10:00:00, 2024-06-01 10:00:30, 0, 1, 1, null),(2, 1, 2024-06-01 10:00:00, 2024-06-01 10:00:24, 0, 0, 1, null),(3, 3, 2024-06-01 11:00:00, 2024-06-01 11:00:34, 0, 1, 0, 1),(1, 2, 2024-09-01 10:00:00, 2024-09-01 10:00:42, 1, 0, 1, null),(2, 2, 2024-06-01 11:00:00, 2024-06-01 11:00:30, 1, 0, 1, null),(3, 3, 2024-06-01 11:00:00, 2024-06-01 11:00:34, 0, 1, 0, 1);
a、先分析 b、计算结束时间和开始时间的差值 SELECT video_id ,end_time - start_time as avg_comp_play_rate
FROM dy_user_video_log ORDER BY video_idc、加入结束时间减开始时间大于30的记为1其他的记为0
SELECT video_id,avg_comp_play_rate,IF(avg_comp_play_rate 30, 1, 0) AS play_rate_result
FROM
(SELECT video_id,(end_time - start_time) as avg_comp_play_rateFROM dy_user_video_log
) AS derived_table_name;2、SQL实现效果
-- 选择视频ID和计算平均完成播放率
SELECT a.video_id, -- 选择视频的ID-- 计算平均完成播放率四舍五入到小数点后三位round(-- 使用条件求和和计数函数计算完成播放率sum(if(-- 如果视频的结束时间减去开始时间大于等于视频的时长则认为是完成播放end_time - start_time duration, 1, -- 完成播放记为10 -- 否则记为0)) / -- 将完成播放的个数除以总播放次数count(start_time), -- 计算总播放次数3 -- 四舍五入到小数点后三位) as avg_comp_play_rate -- 将计算结果命名为avg_comp_play_rate
FROM dy_user_video_log a -- 从dy_user_video_log表中选择数据别名为a
-- 左连接dy_video_info表别名为b根据视频ID匹配
LEFT JOIN dy_video_info bon a.video_id b.video_id
WHERE year(start_time) 2024 -- 筛选出开始时间年份为2024的记录
GROUP BY a.video_id -- 根据视频ID分组
ORDER BY avg_comp_play_rate DESC; -- 按平均完成播放率降序排列