文章目录
每天最高峰同时直播人数
一、题目
二、分析
三、SQL实战
四、样例数据参考
每天最高峰同时直播人数
一、题目
有如下数据记录直播平台主播上播及下播时间,根据该数据计算出平台当天最高峰同时直播人数。
这里用主播名称做统计,前提是主播名称唯一,不能出现重复,平台有名称重复验证。
样例数据:
目标结果:
二、分析
查询每天同时最大人数,考察的是对拉链转化为日志的处理方式以及聚合函数的累积计算。
维度 | 评分 |
---|---|
题目难度 | ⭐️⭐️⭐️⭐️ |
题目清晰度 | ⭐️⭐️⭐️⭐️⭐️ |
业务常见度 | ⭐️⭐️⭐️⭐️⭐️ |
三、SQL实战
平台每天最高峰同时直播人数分析如下:
1、首先对原始数据进行处理,生成主播上下播的日志数据,同时增加人数变化字段,主播上播为1,主播下播-1。新数据包含 user_name,action_time,day_time,change_cnt
查询语句:
--开播记录
select
user_name,
start_time as action_time,
to_date(start_time) as day_time,
1 as change_cnt
from t1_livestream_log
union all
--下播记录
select
user_name,
end_time as action_time,
to_date(end_time) as day_time,
-1 as change_cnt
from t1_livestream_log
查询结果:
2、对操作日志按照操作时间进行累积求和
查询语句:
with t as(
--开播记录
select
user_name,
start_time as action_time,
to_date(start_time) as day_time,
1 as change_cnt
from t1_livestream_log
union all
--下播记录
select
user_name,
end_time as action_time,
to_date(end_time) as day_time,
-1 as change_cnt
from t1_livestream_log
)
select
user_name,
action_time,
day_time,
change_cnt,
sum(change_cnt)over(partition by day_time order by action_time asc) as online_cnt
from t;
查询结果:
3、求取累计求和中的最大值,即为当天最高峰同时直播人数
查询语句:
with t as(
--开播记录
select
user_name,
start_time as action_time,
to_date(start_time) as day_time,
1 as change_cnt
from t1_livestream_log
union all
--下播记录
select
user_name,
end_time as action_time,
to_date(end_time) as day_time,
-1 as change_cnt
from t1_livestream_log
)
select
day_time,
max(online_cnt) as max_online_cnt
from
(
select
user_name,
action_time,
change_cnt,
day_time,
sum(change_cnt)over(partition by day_time order by action_time asc) as online_cnt
from t
) tt
group by day_time;
查询结果:
四、样例数据参考
CREATE TABLE IF NOT EXISTS t1_livestream_log (
user_name STRING, -- 主播名称
start_time STRING, -- 开始时间
end_time STRING -- 结束时间
);
insert into t1_livestream_log(user_name, start_time, end_time) values
('亚瑟','2024-06-29 01:00:00','2024-06-29 02:01:05'),
('曹操','2024-06-29 01:05:00','2024-06-29 02:03:18'),
('孙悟空','2024-06-29 02:00:00','2024-06-29 04:03:22'),
('花木兰','2024-06-29 03:15:07','2024-06-29 04:33:21'),
('露娜','2024-06-29 03:34:16','2024-06-29 06:10:45'),
('云缨','2024-06-29 05:22:00','2024-06-29 07:01:08'),
('姬小满','2024-06-29 06:11:03','2024-06-29 09:26:05'),
('哪吒','2024-06-29 08:00:00','2024-06-29 12:34:27'),
('亚瑟','2024-06-29 11:00:00','2024-06-29 16:03:18'),
('沈梦溪','2024-06-29 15:00:00','2024-06-29 17:01:05'),
('姜子牙','2024-07-29 01:00:00','2024-07-29 02:01:05'),
('高渐离','2024-07-29 01:05:00','2024-07-29 02:03:18'),
('张良','2024-07-29 02:00:00','2024-07-29 04:03:22'),
('甄姬','2024-07-29 03:15:07','2024-07-29 04:33:21'),
('金蝉','2024-07-29 03:34:16','2024-07-29 06:10:45'),
('鲁班七号','2024-07-29 05:22:00','2024-07-29 07:01:08'),
('后羿','2024-07-29 06:11:03','2024-07-29 09:26:05'),
('哪吒','2024-07-29 08:00:00','2024-07-29 12:34:27'),
('鲁班七号','2024-07-29 11:00:00','2024-07-29 16:03:18'),
('后羿','2024-07-29 15:00:00','2024-07-29 17:01:05');
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨