hivesql练习_出勤率问题

发布时间 2023-03-29 00:07:44作者: 娜娜娜娜小姐姐

现有用户出勤表(user_login)如下。

user_id
(用户id)
course_id
(课程id)
login_in
(登录时间)
login_out
(登出时间)
1 1 2022-06-02 09:08:24 2022-06-02 10:09:36
1 1 2022-06-02 11:07:24 2022-06-02 11:44:21
1 2 2022-06-02 13:50:24 2022-06-02 14:21:50
2 2 2022-06-02 13:50:10 2022-06-02 15:30:20

课程报名表(course_apply)如下。

course_id
(课程id)
course_name
(课程名称)
user_id
(用户id)
1 java [1,2,3,4,5,6]
2 大数据 [1,2,3,6]
3 前端 [2,3,4,5]

注:出勤率指用户看直播时间超过40分钟,求出每个课程的出勤率(结果保留两位小数)。

期望结果如下:

course_id
<int>
(课程id)
adr
<decimal(16,2)>
(出勤率)
1 0.33
2 0.50
3 0.25

 

解答:

 1 with tt as(
 2   SELECT
 3   ul.course_id,
 4   if(unix_timestamp(login_out) - unix_timestamp(login_in) >= 40 * 60, 1, 0) flag,
 5   size(ca.user_id) total_user --总用户数
 6   FROM
 7   user_login ul
 8   join course_apply ca on ul.course_id = ca.course_id
 9 )
10 select course_id, cast(sum(flag)/ max(total_user) as decimal(16, 2)) adr
11 from tt
12 group by course_id