题解 | #牛客直播各科目出勤率#
牛客直播各科目出勤率
https://www.nowcoder.com/practice/0cab547df4f0430b93042128f445d899
明确题意:出勤率(在线时长10分钟及以上人数),可以对attend_tb表根据course_id, user_id分组用sum(timestampdiff(minute, begin,end))计算出勤时间(退出再进累计够10分钟也算),统计满足条件的user_id数。
报名人数:behavior_tb这张表一个用户对一门课,不会重复的,因此分母只需统计sum(bt.if_sign)即可得到报名人数。
select ct.course_id, ct.course_name, round(100 * count(distinct if(t1.time1 >= 10, bt.user_id, null)) / sum(bt.if_sign), 2) as 'attend_rate(%)' from course_tb ct join behavior_tb bt on ct.course_id=bt.course_id # 此处需要用左连接,因为可能存在用户报名了但是并没有观看的,分母仍然需要记录 left join ( select user_id, course_id, sum(timestampdiff(minute, in_datetime, out_datetime)) as time1 from attend_tb group by user_id, course_id ) t1 on bt.course_id=t1.course_id and bt.user_id=t1.user_id group by ct.course_id, ct.course_name order by ct.course_id asc