#2、将关联且经过条件筛选后的数据表,按照需求挑选展示字段#
select t1.video_id,
#2.1、该字段展示的是“视频完播率”,而“视频完播率”=“完成播放次数”/“总播放次数”(①“完成播放次数”=“结束观看时间与开始播放时间的差>=视频时长时,视为完成播放” 👉 如果“结束观看时间-开始播放时间 >= 视频时长”那就算完成1次 👉 sum(case when timestampdiff(second,start_time,end_time) >= t2.duration then 1 else 0 end))(②总播放次数=所有“播放过”的视频数 👉 只要有播放,那就算1次 👉 count(start_time))
round(sum(case when timestampdiff(second,start_time,end_time) >= t2.duration then 1 else 0 end) / count(start_time),3) as avg_comp_play_rate

#1、确定需求所需的数据表(求结束观看时间与开始播放时间的差👉tb_user_video_log,>=视频时长时👉tb_video_info)#
from tb_user_video_log as t1
left join tb_video_info as t2
on t1.video_id = t2.video_id
#1.1、由于video的duration仅仅几秒,基本是在当天看完,因此随便拿start_time或end_time中任意一个字段,来作为“2021年里有播放记录的每个视频”中“2021年”的条件筛选字段#
where extract(year from t1.start_time) = '2021'

#3、按照video_id进行分组统计,并对“avg_comp_play_rate”字段进行降序排序#
group by 1
order by 2 desc;