题解 | 牛客直播各科目出勤率
牛客直播各科目出勤率
https://www.nowcoder.com/practice/0cab547df4f0430b93042128f445d899
因为这道题我现在的思路跟之前的思路不太一样,而且答案提交正确,所以来记录一下。
从题目我们可以知道这道题的关键在于求出出勤人数和报名人数,这里有三张表格,所以不太可能用一个表就写完,肯定是需要进行连接的。
一、求出勤人数
开一个临时表,根据限定条件‘出勤(在线时长10分钟及以上)’在where那里写:
timestampdiff (minute, in_datetime, out_datetime) >= 10
由于之后做出的总表既有course_id,又有course_name,所以我们这里做出的临时表把它们都给取出来,然后就是对得到的限定条件的人数进行去重,把出勤人数求出来:
with t1 as ( select course_id, course_name, count(distinct user_id) cnt_user from course_tb left join attend_tb using (course_id) where timestampdiff (minute, in_datetime, out_datetime) >= 10 group by 1, 2 order by 1 )
二、求出勤人数和报名人数之比
出勤人数刚才已经得到了,就是cnt_user,那么这里需要得到报名人数。报名人数怎么求呢?使用sum函数进行求和即可。
这里我觉得比较灵巧的一点是把刚才得到的表t1和原有的报名表进行连接,不需要再连接其它表了:
select course_id, course_name, round(cnt_user / sum(if_sign) * 100, 2) from t1 left join behavior_tb using (course_id) group by 1, 2 order by 1#mysql#
字节跳动公司福利 1385人发布