题解 | #各个视频的平均完播率#
各个视频的平均完播率
https://www.nowcoder.com/practice/96263162f69a48df9d84a93c71045753
select b.video_id,
round((sum(case when (timestampdiff(second,a.start_time,a.end_time))>=b.duration then 1 else 0 end)/count(1)),3) as avg_comp_play_rate
from tb_video_info b
left join tb_user_video_log a
on b.video_id=a.video_id
where year(start_time)=2021
group by b.video_id
order by avg_comp_play_rate DESC
时间相加减可以用 timestampdiff(天/分/秒等,时间1,时间2)
case when 判断 then 如果成立返回的值 else 如果不成立返回的值 en d
count(1)就和count(*)的用法一样
为什么要用左连接,我的理解是因为03视频在21年没有播放,导出的可能没有03的数据,所有用左连接是保证不管表a里有没有播放记录,都要返回表b里所有的编号数据