平均播放进度大于60%的视频类别:

  • 开始想了半天, 代码也写出来了, 但是测试用例死活就是通过不了
select vi.tag,
    concat(round(avg(
    if((vl.end_time - vl.start_time) > vi.duration, 1,  (vl.end_time - vl.start_time)/vi.duration)
    ) * 100, 2), '%') as avg_play_progress
from tb_user_video_log vl
join tb_video_info vi on vl.video_id=vi.video_id
group by vi.tag
having avg(
    if((vl.end_time - vl.start_time) > vi.duration, 1,  (vl.end_time - vl.start_time)/vi.duration)
    ) > 0.6
order by avg_play_progress desc

  • 这样的到的测试用例死活过不去, 但是逻辑上又是完全没问题的

换成timestampdiff后, 直接就通过了, 求万能的牛友解惑.

关于上代码vl.end_time - vl.start_time我测试过, 是可以正常相减的

select vi.tag,
    concat(round(avg(
    if(timestampdiff(second, vl.start_time, vl.end_time) > vi.duration, 1,  timestampdiff(second, vl.start_time, vl.end_time) / vi.duration)
    ) * 100, 2), '%') as avg_play_progress
from tb_user_video_log vl
join tb_video_info vi on vl.video_id=vi.video_id
group by vi.tag
having avg(
    if(timestampdiff(second, vl.start_time, vl.end_time) > vi.duration, 1,  timestampdiff(second, vl.start_time, vl.end_time) / vi.duration)
    ) > 0.6
order by avg_play_progress desc