一个子查询,两个join即可

select distinct user_id, course_id
from attend_tb
where timestampdiff(minute, in_datetime, out_datetime) >= 10
select course_id, course_name,
    round(count(t1.user_id)*100/sum(if_sign),2) as 'attend_rate(%)'
from
(
    select distinct user_id, course_id
    from attend_tb
    where timestampdiff(minute, in_datetime, out_datetime) >= 10
) as t1
right join behavior_tb
using(user_id, course_id)
inner join course_tb
using(course_id)
group by course_id, course_name
order by course_id