select tb1.course_id, course_name,
round(count(tb2.user_id)/count(tb1.user_id)*100,2)
from 
  (select user_id, course_id
  from behavior_tb
  where if_sign=1) tb1
  left join
  (select distinct user_id, course_id, 
  if(timestampdiff(second,in_datetime,out_datetime)/60>=10,1,0) if_in
  from attend_tb
  where hour(out_datetime)>=19) tb2
  on tb1.user_id=tb2.user_id and tb1.course_id=tb2.course_id and tb2.if_in=1
  left join 
  course_tb tb3
  on tb1.course_id=tb3.course_id
group by tb1.course_id, course_name
order by tb1.course_id

#思路:报名表计算报名人数,出勤表计算出勤人数,最后分组聚合计算出勤率。
#①报名人数及if_sign=1的人,选出后形成tb1;
#②出勤人数即进出时间间隔≥600秒的人(有些人多次进出用distinct去重),给出勤人打个标签为1,其余为0,形成tb2;
#③tb1左联tb2再左联科目表,分组聚合计算即可。