先通过tb_user_video_log,tb_video_info计算出每个viedo_id的播放情况
select
tu.video_id
,tv.tag
,if((TIMESTAMPDIFF(second,tu.start_time,tu.end_time) / tv.duration) > 1,1,TIMESTAMPDIFF(second,tu.start_time,tu.end_time) / tv.duration) Isno
from tb_user_video_log tu
left join tb_video_info tv
on tu.video_id = tv.video_id
再通过tag分组,使用AVG()计算出每个tag对应的平均完播率 筛选出avg_play_progress大于0.6的分组
select
t.tag
,concat(ROUND(avg(Isno) * 100, 2), '%') avg_play_progress
from
(select
tu.video_id
,tv.tag
,if((TIMESTAMPDIFF(second,tu.start_time,tu.end_time) / tv.duration) > 1,1,TIMESTAMPDIFF(second,tu.start_time,tu.end_time) / tv.duration) Isno
from tb_user_video_log tu
left join tb_video_info tv
on tu.video_id = tv.video_id) t
group by t.tag
having avg(Isno) > 0.6
order by avg_play_progress desc