# 先统计每个用户的在线时长 with a as( select user_id, course_id, sum(timestampdiff(second,in_datetime,out_datetime)) as zaixian from attend_tb group by user_id,course_id having zaixian/60>=10 ), b as( select course_id, sum(if_sign) as baoming from behavior_tb group by course_id ), c as ( select course_id, count(distinct user_id) as zaixiannum from a group by course_id ), d as ( select ct.course_id,ct.course_name, round(100*c.zaixiannum/b.baoming,2) as attend_rate from course_tb as ct left join c on ct.course_id = c.course_id left join b on ct.course_id = b.course_id order by ct.course_id ) select * from d