SELECT course_id, course_name, ROUND(attend_cnt * 100 / sign_cnt, 2) AS 'attend_rate(%)' FROM ( SELECT course_id, COUNT(DISTINCT user_id) AS attend_cnt FROM attend_tb WHERE TIMESTAMPDIFF(MINUTE, in_datetime, out_datetime) >= 10 GROUP BY course_id ) a JOIN ( SELECT course_id, course_name, SUM(if_sign) AS sign_cnt FROM behavior_tb LEFT JOIN course_tb USING(course_id) GROUP BY course_id, course_name ) b USING(course_id) GROUP BY course_id, course_name ORDER BY course_id