with t1 as (
    select
        course_id,
        sum(if_sign) as sign_cnt
    from 
        behavior_tb
    group by 
        course_id
),

t2 as (
    select
        course_id,
        count(user_id) as attend_num
    from (
        select
            course_id,
            user_id,
            sum(continue_min) as attend_min
        from (
            select
                user_id,
                course_id,
                timestampdiff(minute, in_datetime, out_datetime) as continue_min
            from 
                attend_tb
        ) as t2_1
        group by 
            course_id,
            user_id
    ) as t2_2
    where 
        attend_min >= 10
    group by 
        course_id
)

select
    t1.course_id,
    course_tb.course_name,
    round(t2.attend_num / t1.sign_cnt * 100,2) as attend_rate
from 
    t1
left join 
    t2
on 
    t1.course_id = t2.course_id
left join 
    course_tb
on 
    t1.course_id = course_tb.course_id
order by 
    t1.course_id