题解 | #各个视频的平均完播率#

各个视频的平均完播率

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

#纯粹的学习分享#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务