一道面试题如下:

简单理解就是求每个直播间,所有的最短时间段的上线人数。简单图解下:

有了上图,我们应该就秒懂了这题的解题思路,先将所有的时间点排序,按顺序分配得到每个时间分区,绿色为进入起始时间点,红色为结束时间点,我们进入起始点时+1,进入结束时间点时-1,这样就可以得到每个区间的在线人数了。当然假如user3也从10:21:10进去,则这个时间点位置+2,后续的时间片段内在线人数就是累加后的值。

理解了思路,我们就可以开始编码了:

pandas处理代码

最终完整处理代码为:

import pandas as pddf = pd.DataFrame([["a", "user1", "2022-02-01 10:12:13", "2022-02-01 10:30:23"],["a", "user2", "2022-02-01 10:21:10", "2022-02-01 11:02:06"],["b", "user1", "2022-02-01 10:12:13", "2022-02-01 10:30:23"],["b", "user2", "2022-02-01 10:21:10", "2022-02-01 11:02:06"],["b", "user3", "2022-02-01 10:19:10", "2022-02-01 11:05:06"],
], columns=["room_id", "user_id", "start_time", "end_time"])
dfdef func(df):times = pd.concat([df.start_time.value_counts(),-df.end_time.value_counts()]).sort_index()times.index.name = "start_time"r = times.cumsum().to_frame("user_cnt").reset_index()r.insert(1, "end_time", r.start_time.shift(-1))r.insert(0, "room_id", df.room_id.iat[0])return r.query("user_cnt>0")df.groupby("room_id", as_index=False).apply(func).reset_index(drop=True)

结果:

注意:使用如下代码即可设置一个单元格可以显示全部输出()

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

默认是输出结尾表达式:

from IPython.core.interactiveshell import InteractiveShellprint(InteractiveShell.ast_node_interactivity.default_value)
print(InteractiveShell.ast_node_interactivity.values)
last_expr
['all', 'last', 'last_expr', 'none', 'last_expr_or_assign']

MySQL处理代码

首先我们创建表并插入数据:

CREATE TABLE `t1` (`room_id` VARCHAR(20),`user_id` VARCHAR(20),`start_time` DATETIME,`end_time` DATETIME
);INSERT  INTO `t1`(`room_id`,`user_id`,`start_time`,`end_time`) VALUES ('a','user1','2022-02-01 10:12:13','2022-02-01 10:30:23');
INSERT  INTO `t1`(`room_id`,`user_id`,`start_time`,`end_time`) VALUES ('a','user2','2022-02-01 10:21:10','2022-02-01 11:02:06');
INSERT  INTO `t1`(`room_id`,`user_id`,`start_time`,`end_time`) VALUES ('b','user1','2022-02-01 10:12:13','2022-02-01 10:30:23');
INSERT  INTO `t1`(`room_id`,`user_id`,`start_time`,`end_time`) VALUES ('b','user2','2022-02-01 10:21:10','2022-02-01 11:02:06');
INSERT  INTO `t1`(`room_id`,`user_id`,`start_time`,`end_time`) VALUES ('b','user3','2022-02-01 10:19:10','2022-02-01 11:05:06');

然后编写SQL:

SELECTroom_id, start_time, end_time, user_cnt
FROM(SELECTroom_id, start_time,lead(start_time) over(PARTITION BY room_id ORDER BY start_time) end_time,SUM(i) over(PARTITION BY room_id ORDER BY start_time) user_cntFROM(SELECT room_id, start_time, COUNT(1) AS iFROM t1 GROUP BY room_id, start_timeUNION ALL SELECT room_id, end_time, -COUNT(1) AS iFROM t1 GROUP BY room_id, end_time) a
) b
WHERE user_cnt>0;

OK,问题解决。若读者有更优的解决方案欢迎分享!!!

对比MySQL和Pandas统计直播间各时间段上线人数相关推荐

  1. 浅析直播间海量聊天消息的架构设计难点

    在视频直播场景中,弹幕交互.与主播的聊天.各种业务指令等等,组成了普通用户与主播之间的互动方式. 从技术的角度来看,这些实时互动手段,底层逻辑都是实时聊天消息或指令的分发,技术架构类比于IM应用的话, ...

  2. 抖音直播间带货最新玩法和运营技巧

    现在几乎所有的品牌.商家.创业者都在探索直播带货之路,但是大多数人的直播之路走得并不顺利. 一场成功的直播,涉及到的运营细节太多了.如果没有前期的准备和策划,动不动就长达4~6个小时直播,根本无法顺利 ...

  3. 1022场小红书品牌带货直播数据复盘,双11小红书直播间投放策略

    今年4月才入驻小红书的个护国货品牌诗裴丝洗发水通过小红书直播获得快速爆发,直播带货销量占比持续稳定占总量约70%.直播商家的核心是人.货.场.诗裴丝在小红书直播间选择上究竟有何独到之处? ▌ 小红书直 ...

  4. 抖音直播带货数据统计,直播运营需要看哪些直播间数据

    现在的抖音是非常火的,是流量的聚集地,有许多的网红,和电商商家都会选择在抖音平台做直播,但是大家在抖音做直播的时候也需要运营才可以,直播间也同样需要流量,抖音直播运营要做些什么?要看哪些数据? 第一个 ...

  5. 直播粉丝统计平台 抖音直播粉丝 如何查看直播间的粉丝人数 如何查看主播直播数据记录

    该开源项目提供了一个基于 web 的抖音直播粉丝统计平台,用户可以使用该平台查看直播过程中的实时粉丝数量,以及每个粉丝的等级.停留时长.粉丝名称和抖音号等信息.此外,该平台还提供了查看历史直播数据的功 ...

  6. 统计每天每个直播间的访客数、每天最大访客数的直播间

    1.统计每天每个直播间的访客数.每天最大访客数的直播间 2.查找至少连续观看3天的用户ID 及出现直播间 table LiveID UserID Date 1 1 20200601 1 2 20200 ...

  7. 抖音直播带货数据统计,抖音直播间数据怎么分析

    现在直播带货是一个热门趋势,它可以突破抖音挂购物车数量的限制,已经有不少商家通过直播带货实现流量变现了.那么,如何做好抖音直播就成了抖音电商玩家最大的需求. 很多带货直播团队都知道,直播后对抖音直播间 ...

  8. 全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

    前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过.同学们都忙着找工作,我也在这里抛一份简历吧,欢迎各位老板和猎手诚邀.我们进入正题.直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一 ...

  9. 动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

    前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过.同学们都忙着找工作,我也在这里抛一份简历吧,欢迎各位老板和猎手诚邀.我们进入正题.直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一 ...

最新文章

  1. node.js浅入深出---之fs模块
  2. 商品规格可选怎么设计_两分钟前|开平木质地栈板怎么安装
  3. 用java程序完成从kafka队列读取消息到sparkstreaming再从sparkstreaming里把数据导入mysql中
  4. Redis基础数据结构内部实现简单介绍
  5. php和mysql处理树状_分级_无限分类_分层数据的方法_PHP和MySQL处理树状、分级、无限分类、分层数据的方法...
  6. Shopee:阿里神话被打碎,东南亚第一电商平台的崛起史
  7. 浅入深出Vue:注册
  8. selector多路复用_python selectors模块实现 IO多路复用机制的上传下载
  9. 查看局域网内所有ip 和 mac
  10. I2C driver编写常用接口
  11. 从Visual studio 2005移出Visual Assist
  12. 文件夹1KB快捷方式(暴风一号)病毒的解决办法
  13. 计算机办公自动化取证,办公自动化课程总结范文
  14. java.io.NotSerializableException: java.util.ArrayList$SubList
  15. openCV视频教程
  16. html背景图片加载慢,javascript – 如何加快我网站的背景图片加载速度?
  17. Nginx报错failed (13: Permission denied)
  18. HM16.7量化部分学习记录
  19. habor镜像仓库部署
  20. 推荐一下十三款内网穿透工具(超全)

热门文章

  1. 阿里云--云开发平台的创建与部署
  2. 沈阳房价还要涨的七个理由
  3. 【jq】如何优雅在shell脚本处理json?
  4. Python数学建模系列(八):图论
  5. BUUCTF:我吃三明治
  6. 使用指针数组+申请动态内存实现英文单词排序
  7. HTML+CSS 实现下拉三级菜单
  8. javascript条件语句if else用法
  9. ResponseEnum
  10. WebRTC 核心功能介绍--一篇读懂SDP PlanB UnifiedPlan(从PlanB迁移到UnifiedPlan)