1.先求出2021年各个视频播放完成情况,播放完成的条件为:end_time-start_time>=duration

SELECT t.video_id,
(CASE WHEN t.end_time-t.start_time>=t1.duration THEN 1 ELSE 0 END) AS finish
FROM tb_user_video_log AS t JOIN tb_video_info AS t1
ON t.video_id=t1.video_id
WHERE YEAR(t.start_time)=2021

2.再通过avg函数求出来播放率的情况

ROUND(AVG(t2.finish),3)

3.根据题目的要求,需要按照vedio_id进行分组,同时按照avg_comp_play_rate排序,综合整理代码

SELECT
	t2.video_id,
	ROUND( AVG( t2.finish ), 3 ) AS avg_comp_play_rate 
FROM
	(
	SELECT
		t.video_id,
		( CASE WHEN t.end_time - t.start_time >= t1.duration THEN 1 ELSE 0 END ) AS finish 
	FROM
		tb_user_video_log AS t
		JOIN tb_video_info AS t1 ON t.video_id = t1.video_id 
	WHERE
		YEAR ( t.start_time )= 2021 
	) AS t2 
GROUP BY
	t2.video_id 
ORDER BY
	avg_comp_play_rate DESC