题解 | #牛客直播各科目出勤率#
牛客直播各科目出勤率
https://www.nowcoder.com/practice/0cab547df4f0430b93042128f445d899
SELECT C.course_id,C.course_name, ROUND(T1.P/T2.B*100,2) AS "attend_rate(%)" FROM course_tb C JOIN (SELECT course_id,COUNT(DISTINCT user_id) AS P FROM attend_tb WHERE TIMESTAMPDIFF(MINUTE,in_datetime,out_datetime)>=10 GROUP BY course_id) T1 --先求每个课程的出勤人数,注意有用户一节课进出了两次,需要去重(distinct user_id) JOIN (SELECT course_id,SUM(if_sign) B FROM behavior_tb GROUP BY course_id) T2 ON C.course_id=T1.course_id AND C.course_id=T2.course_id --再求出各课程报名的人数,联结三个表,用course_id作为条件 ORDER BY C.course_id;
附:其实鄙人认为,这题这么求有点隐含问题,
因为当同一个用户在同一节 课程进进出出几次,然后累计时间超过10分钟,但是单次没超过的话,他不会被算成出勤了,这样出勤率就会有问题(算小了)。