#主要的坑点在于:有人提前进入了直播间,而提前的时间并计算到在线时长中 SELECT course_id ,course_name ,ROUND(100*SUM(is_online)/COUNT(course_id),2) AS attend_rate FROM ( SELECT t1.course_id ,user_id ,in_datetime ,out_datetime ,b_cid ,rk ,course_name ,IF(TIMESTAMPDIFF(MINUTE,in_datetime,out_datetime)>=10,1,0) AS is_online FROM ( SELECT a.user_id ,a.course_id #,course_name ,IF(LEFT(course_datetime,15)>=in_datetime,LEFT(course_datetime,15),in_datetime) AS in_datetime ,out_datetime ,b.course_id AS b_cid ,ROW_NUMBER() OVER(PARTITION BY a.user_id,course_name) AS rk FROM behavior_tb AS a LEFT JOIN attend_tb AS b ON a.user_id = b.user_id AND a.course_id = b.course_id LEFT JOIN course_tb AS c ON b.course_id = c.course_id WHERE if_sign = 1 ) AS t1 LEFT JOIN course_tb ON t1.course_id = course_tb.course_id #关联course_tb是因为发生了课程名流失的问题 WHERE rk=1 ) AS t2 GROUP BY course_id,course_name ORDER BY course_id