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

各个视频的平均完播率

https://www.nowcoder.com/practice/96263162f69a48df9d84a93c71045753

看各位佬发的题解,代码都挺短的。我就发一个比较长的

select
    video_id,
    round(count(if_fi) / count(*), 3) as avg_comp_play_rate
	#count()不计入Null值,我在嵌套的子查询中,将没有完播的列的 if_fi 设置为null,就不计入计数了
from
    (
        select
            uv.video_id as video_id,
            case
                when timestampdiff (SECOND, start_time, end_time) >= duration then 1
                else null
            end as if_fi
			#这里我把tb_user_video_log每一行加了一列 if_fi 表示是否完播
        from
            tb_user_video_log uv
            join tb_video_info v on uv.video_id = v.video_id
        where year(start_time) = '2021' #直接过滤掉不是2021年的数据
        
    ) as t1
group by
    video_id
order by
    avg_comp_play_rate desc;

感觉还能优化,奈何我sql优化实在学的不好,希望大佬能够优化一下。

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-28 13:48
hory权:校招vip纯神人了,还说自己是什么师范大学的
点赞 评论 收藏
分享
04-03 12:09
東京大学 C++
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务