大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题

之后会不定期更新每日一题sql系列。

SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集,如有雷同,纯属巧合。

1.题目

问题1:如下为某直播平台各主播的开播及关播时间数据明细,现在需要计算该平台最高峰期同时在线的主播人数。

问题2:以下为某直播间用户上线与下线的时间数据明细,现求该直播间最高峰同时在线的用户人数。

以上两个问法为同一问题。

2.基础数据准备

create table if not exists temp.user_login_info (
`id` bigint comment '用户id',
`start_time` string comment '上线时间',
`end_time` string comment '下线时间'
) comment '用户上下线时间测试'

数据预览

id start_time end_time
1 2024-05-05 07:59:06 2024-05-05 08:57:54
2 2024-05-05 08:14:02 2024-05-05 08:51:32
3 2024-05-05 08:38:10 2024-05-05 08:38:28
4 2024-05-05 08:41:22 2024-05-05 08:42:03
5 2024-05-05 08:33:39 2024-05-05 08:52:19
6 2024-05-05 08:54:50 2024-05-05 08:56:07
7 2024-05-05 08:56:12 2024-05-05 08:57:42
8 2024-05-05 08:21:43 2024-05-05 08:21:48
9 2024-05-05 07:59:58 2024-05-05 08:13:42
10 2024-05-05 08:20:05 2024-05-05 08:29:42

3.问题分析

查询同时最大人数,考察的是对拉链转化为日志的处理方式以及聚合开窗函数的累积计算的使用。聚合开窗函数使用详见SQL窗口函数之聚合函数类

维度 评分
题目难度 ️️️️
题目清晰度 ️️️️️
业务常见度 ️️️️️

4.解题SQL

1.生成日志流水

对原始数据进行处理,生成主播上下线的日志流水数据,增加标记状态值(上线为1,下线为-1)。

-- 上播记录
select
id,
start_time as log_time,
1 as flag
from temp.user_login_info
union all
-- 下播记录
select
id,
end_time as log_time,
-1 as flag
from temp.user_login_info

数据结果如下:

id log_time flag
1 2024-05-05 08:57:54 -1
2 2024-05-05 08:51:32 -1
3 2024-05-05 08:38:28 -1
4 2024-05-05 08:42:03 -1
5 2024-05-05 08:52:19 -1
6 2024-05-05 08:56:07 -1
7 2024-05-05 08:57:42 -1
8 2024-05-05 08:21:48 -1
9 2024-05-05 08:13:42 -1
10 2024-05-05 08:29:42 -1
1 2024-05-05 07:59:06 1
2 2024-05-05 08:14:02 1
3 2024-05-05 08:38:10 1
4 2024-05-05 08:41:22 1
5 2024-05-05 08:33:39 1
6 2024-05-05 08:54:50 1
7 2024-05-05 08:56:12 1
8 2024-05-05 08:21:43 1
9 2024-05-05 07:59:58 1
10 2024-05-05 08:20:05 1

2.开窗函数聚合

对上下线日志流水进行开窗聚合累积计算且查看上下线明细。

select id,log_time,flag,sum(flag) over(order by log_time) as acum_login from (
-- 上播记录
select
id,
start_time as log_time,
1 as flag
from temp.user_login_info where id <= 10
union all
-- 下播记录
select
id,
end_time as log_time,
-1 as flag
from temp.user_login_info where id <= 10
) a
order by log_time

数据结果

id log_time flag acum_login
1 2024-05-05 07:59:06 1 1
9 2024-05-05 07:59:58 1 2
9 2024-05-05 08:13:42 -1 1
2 2024-05-05 08:14:02 1 2
10 2024-05-05 08:20:05 1 3
8 2024-05-05 08:21:43 1 4
8 2024-05-05 08:21:48 -1 3
10 2024-05-05 08:29:42 -1 2
5 2024-05-05 08:33:39 1 3
3 2024-05-05 08:38:10 1 4
3 2024-05-05 08:38:28 -1 3
4 2024-05-05 08:41:22 1 4
4 2024-05-05 08:42:03 -1 3
2 2024-05-05 08:51:32 -1 2
5 2024-05-05 08:52:19 -1 1
6 2024-05-05 08:54:50 1 2
6 2024-05-05 08:56:07 -1 1
7 2024-05-05 08:56:12 1 2
7 2024-05-05 08:57:42 -1 1
1 2024-05-05 08:57:54 -1 0

3.计算最大在线人数

最后计算最大同时在线人数

select max(acum_login) as max_acum_login from (
select id,log_time,flag,sum(flag) over(order by log_time) as acum_login from (
select
id,
start_time as log_time,
1 as flag
from temp.user_login_info where id <= 10
union all
--下播记录
select
id,
end_time as log_time,
-1 as flag
from temp.user_login_info where id <= 10
) a
) b

数据结果

max_acum_login
4

最大在线人数为4。

5.衍生问题解答

如果是最上面的问题2,每个房间同时在线最大人数呢?

那它的写法应该是这样的。

select room_id,max(acum_login) as max_acum_login from (
select id,room_id
,log_time,flag
,sum(flag) over(partition by room_id order by log_time) as acum_login
from (
-- 上线记录
select
id,room_id,
start_time as log_time,
1 as flag
from temp.user_login_info where id <= 10
union all
-- 下线记录
select
id,room_id,
end_time as log_time,
-1 as flag
from temp.user_login_info where id <= 10
) a
) b
group by room_id

就不补充具体数据演示了。

思路:以第一个问题为基础,这里只是多增加了一个房间维度,按房间分组进行开窗聚合累积计算以及最后的分组求最大值。如有问题,欢迎联系我点击此处加群一起学习讨论。

以上,本期全部内容。

感谢阅读。

按例,欢迎点击此处关注我的个人公众号,交流更多知识。

大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题的更多相关文章

  1. 面试系列二:精选大数据面试真题JVM专项-附答案详细解析

    公众号(五分钟学大数据)已推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型: ...

  2. MYSQL数据库导入大数据量sql文件失败的解决方案

    1.在讨论这个问题之前首先介绍一下什么是"大数据量sql文件". 导出sql文件.选择数据库-----右击选择"转储SQL文件"-----选择"结构和 ...

  3. 以慕课网日志分析为例-进入大数据Spark SQL的世界

    下载地址.请联系群主 第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目 ...

  4. 以某课网日志分析为例 进入大数据 Spark SQL 的世界

    第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目中涉及的Hadoop. ...

  5. 【慕课网实战】一、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    课程整套CDH相关的软件下载地址:http://archive.cloudera.com/cdh5/cdh/5/ cdh-5.7.0 生产或者测试环境选择对应CDH版本时,一定要采用尾号是一样的版本 ...

  6. 【大数据面试】【项目开发经验】Hadoop、Flume、Kafka、Hive、MySQL、Sqoop、Azkaban、Spark

    主要内容:框架层面的调优.业务经验 一.Hadoop 1.Hadoop基准测试(HDFS的读写性能.MapReduce的计算能力测试) (1)测试内容:文件上传下载的时间 (2)服务器有几个硬盘插槽 ...

  7. 如何在IDEA里给大数据项目导入该项目的相关源码(博主推荐)(类似eclipse里同一个workspace下单个子项目存在)(图文详解)

    不多说,直接上干货! 如果在一个界面里,可以是单个项目 注意:本文是以gradle项目的方式来做的! 如何在IDEA里正确导入从Github上下载的Gradle项目(含相关源码)(博主推荐)(图文详解 ...

  8. [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.

    给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...

  9. 【大数据面试】Flink 04:状态编程与容错机制、Table API、SQL、Flink CEP

    六.状态编程与容错机制 1.状态介绍 (1)分类 流式计算分为无状态和有状态 无状态流针对每个独立事件输出结果,有状态流需要维护一个状态,并基于多个事件输出结果(当前事件+当前状态值) (2)有状态计 ...

  10. 【慕课网实战】九、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    即席查询普通查询 Load Data1) RDD DataFrame/Dataset2) Local Cloud(HDFS/S3) 将数据加载成RDDval masterLog = sc.textFi ...

随机推荐

  1. Redis高可用之战:主从架构

    ★ Redis24篇集合 1 主从模式介绍 在笔者的另外两篇文章 <Redis系列:RDB内存快照提供持久化能力>.<Redis稳定性之战:AOF日志支撑数据持久化>中,我们介 ...

  2. KingbaseES V8R6 fillfactor 对于表的影响

    前言 fillfactor 表的填充因子是一个介于 10 和 100 之间的百分数.100是默认值.如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页.每个页上的剩余空间将用 ...

  3. OPC报文详解

    OPC (OLE for Process Control) 是一种工业通讯协议的标准,用于实现不同制造商的设备和系统之间的数据交换.它主要用于工业自动化系统中.OPC标准有几个不同的规范,包括OPC ...

  4. arch xfce启用自动挂载usb设备,自动访问usb设备,自动连接usb设备

    1.安装gvfs sudo pacman -S gvfs GVFS(Gnome Virtual File System)是一个用于 GNOME 桌面环境的虚拟文件系统,它提供了一种统一的方式来访问和管 ...

  5. CH392作服务器TCP Server应用配置使用

    CH392工作在TCP Server模式时,参考手册说明需要打开监听Socket端口,也要设置数据连接Socket端口,注意数据连接Socket的源端口和监听Socket的源端口一致. 配置TCP S ...

  6. 【VMware vSAN】创建vSAN Max集群并配置挂载远程数据存储。

    VMware Explore 2023大会上,VMware正式发布了vSAN Max,这是VMware的一种全新分解存储架构,可以为vSphere集群提供PB级分解存储.vSAN Max是基于vSAN ...

  7. 修复HTTP动词篡改导致的认证旁路问题的方法

    本文于2016年4月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 诡异的问题 分析AppScan扫描报告的时候,发现报告里提示" ...

  8. Pandas选择与索引

    Series和DataFrame对象与Numpy数组和标准Python字典的数据索引和选择模式一样. 字典形式选择和索引 Series In [1]: import pandas as pd In [ ...

  9. failed to push some refs to xxxx

    ***************ssh  秘钥上传远程仓库 1. 添加远程仓库ssh 命令   git remote add origin  git@github.com:ThreeNut/zou.gi ...

  10. recover database until cancel

    数据库演示版本为 12.1.0.2 该系列涉及恢复过程中使用的 5 个语句: 1. recover database 2. recover database until cancel 3. recov ...