WITH t1 AS( SELECT tu.video_id, count(tu.video_id) AS total_count FROM tb_user_video_log tu LEFT JOIN tb_video_info tv ON tu.video_id = tv.video_id WHERE SUBSTR(start_time,1,4) = '2021' GROUP BY tu.video_id ), t2 AS ( SELECT tu.video_id,count(tu.video_id) AS valid_count FROM tb_user_video_log tu LEFT JOIN tb_video_info tv ON tu.video_id = tv.video_id WHERE end_time - start_time >= duration AND SUBSTR(start_time,1,4) = '2021' GROUP BY tu.video_id ) SELECT t1.video_id, IFNULL(ROUND(t2.valid_count / t1.total_count,3),0.000) AS avg_comp_play_rate FROM t1 LEFT JOIN t2 ON t1.video_id = t2.video_id GROUP BY t1.video_id ORDER BY avg_comp_play_rate DESC; # 注意:在统计的时候2021是一个不可获取的条件!