题解 | #各个视频的平均完播率#
各个视频的平均完播率
https://www.nowcoder.com/practice/96263162f69a48df9d84a93c71045753
select t1.video_id, ## 内容有点多(1、sum函数统计该视频组算播放完的次数,2、count(*)函数统计该视频组的被观看的次数、3、消除、4、转换结果的格式) cast(sum(if (t1.duration <= t1.subtime, 1, 0))/ count(*) as Decimal(16,3)) `avg_comp_play_rate` from ( select ##选出后面需要的字段 tuvl.id, tuvl.uid, tuvl.video_id, ## 以下两个字段推荐提交不用,但是测试最后带一下,好检查问题 tuvl.start_time, tuvl.end_time, ## 算出该用户这次看某个视频的连续时间(为了和后面视频时间做比较) unix_timestamp (end_time) - unix_timestamp (start_time) `subtime`, tvi.duration from tb_user_video_log tuvl ## 直接内连接,减少数据量 inner join tb_video_info tvi on tuvl.video_id = tvi.video_id ## 过滤条件,挑出是2021年的记录 where year(tuvl.start_time)='2021' and year(tuvl.end_time)='2021' ) t1 ## 按照视频分组 group by t1.video_id ## 按照视频播放率降序排序 order by avg_comp_play_rate desc#纯粹的学习分享#