SELECT video_id,ROUND(AVG(IF(TIMESTAMPDIFF(SECOND,start_time,end_time)>=duration,1,0)),3) AS avg_comp_play_rate
FROM tb_user_video_log JOIN tb_video_info USING(video_id)
WHERE YEAR(start_time)=2021
GROUP BY video_id
ORDER BY avg_comp_play_rate DESC;

本题要点

1.关于完播率

完播率是完播次数与总的播放次数的比,与播放的具体时长无关,因此应将比较后的时间按照计数来将其参与运算

2.TIMESTAMPDIFF的用法

该函数用于计算两个时间戳只差:TIMESTAMPDIFF(unit, start_time, end_time)

其中unit可以是yearqurater,,month,day,hour,minute,second

3.保留三位小数

ROUND(x,3)

4.关于两个表的联结

会先执行FROM将两个表联结,联结时可使用USING确定联结键,在调用各列时不必须用表的索引。