大数据面试SQL(三):每分钟在线直播人数
文章目录
每分钟在线直播人数
一、题目
二、分析
三、SQL实战
四、样例数据参考
每分钟在线直播人数
一、题目
有如下数据记录直播平台主播上播及下播时间,根据该数据计算出平台每分钟的在线直播人数。
这里用主播名称做统计,前提是主播名称唯一,不能出现重复,平台有名称重复验证。
样例数据:
目标结果:
截取部分数据
需要每分钟都要显示人数,哪怕只有0的数据也要显示,不能出现以下结果。
二、分析
查询每分钟在线人数,这里处理逻辑基本和最高峰在线人数是一致的,但有一个问题,如果某一分钟内无任何操作记录,则不会出现该分钟的数据,我们就统计不到。所以这里额外考察了生成数据。
维度 | 评分 |
---|---|
题目难度 | ⭐️⭐️⭐️⭐️ |
题目清晰度 | ⭐️⭐️⭐️⭐️⭐️ |
业务常见度 | ⭐️⭐️⭐️⭐️⭐️ |
三、SQL实战
1、首先对原始数据进行处理,生成主播上下播的日志数据,同时增加人数变化字段,主播上播为1,主播下播-1。新数据包含 user_name,action_time,change_cnt。
查询语句:
--开播记录
select
user_name,
start_time as action_time,
1 as change_cnt
from t2_livestream_log
union all
--下播记录
select
user_name,
end_time as action_time,
-1 as change_cnt
from t2_livestream_log
查询结果:
截取部分数据
2、生成0~24*60-1条记录数据
查询语句:
select idx from (select posexplode(split(space(24*60),' ')) as (idx,value)) t;
查询结果:
截取部分数据
3、根据以上SQL生成每分钟一条记录的心跳记录,心跳记录change_cnt= 0,代表没有主播上播,也没有主播下播。
查询语句:
SELECT'' as user_name,from_unixtime(unix_timestamp('2024-06-29','yyyy-MM-dd')+item*60,'yyyy-MM-dd HH:mm:ss') as action_time,0 as change_cnt
from (select posexplode(split(space(24*60),' ')) as (item,value)) t
union all
SELECT'' as user_name,from_unixtime(unix_timestamp('2024-06-30','yyyy-MM-dd')+item*60,'yyyy-MM-dd HH:mm:ss') as action_time,0 as change_cnt
from (select posexplode(split(space(24*60),' ')) as (item,value)) t
查询结果:
截取部分数据
4、汇总所有数据之后,对change_cnt累积求和,然后求出每分钟的最大值即可。
查询语句:
with t_all as(
--开播记录
select
user_name,
start_time as action_time,
1 as change_cnt
from t2_livestream_log
union all
--下播记录
select
user_name,
end_time as action_time,
-1 as change_cnt
from t2_livestream_log
--心跳数据
union all
SELECT'' as user_name,from_unixtime(unix_timestamp('2024-06-29','yyyy-MM-dd')+item*60,'yyyy-MM-dd HH:mm:ss') as action_time,0 as change_cnt
from (select posexplode(split(space(24*60),' ')) as (item,value)) t
union all
SELECT'' as user_name,from_unixtime(unix_timestamp('2024-06-30','yyyy-MM-dd')+item*60,'yyyy-MM-dd HH:mm:ss') as action_time,0 as change_cnt
from (select posexplode(split(space(24*60),' ')) as (item,value)) t
)
selectdate_format(action_time,'yyyy-MM-dd HH:mm') as act_minute,max(online_cnt) as minute_max_cnt
from (select user_name,action_time,change_cnt,sum(change_cnt) over (order by action_time asc) online_cntfrom t_all)t1
group by date_format(action_time,'yyyy-MM-dd HH:mm')
;
查询结果:
截取部分数据
四、样例数据参考
CREATE TABLE IF NOT EXISTS t2_livestream_log (user_name STRING, -- 主播名称start_time STRING, -- 开始时间end_time STRING -- 结束时间
);insert into t2_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-06-30 01:00:00','2024-06-30 02:01:05'),
('高渐离','2024-06-30 01:05:00','2024-06-30 02:03:18'),
('张良','2024-06-30 02:00:00','2024-06-30 04:03:22'),
('甄姬','2024-06-30 03:15:07','2024-06-30 04:33:21'),
('金蝉','2024-06-30 03:34:16','2024-06-30 06:10:45'),
('鲁班七号','2024-06-30 05:22:00','2024-06-30 07:01:08'),
('后羿','2024-06-30 06:11:03','2024-06-30 09:26:05'),
('哪吒','2024-06-30 08:00:00','2024-06-30 12:34:27'),
('鲁班七号','2024-06-30 11:00:00','2024-06-30 16:03:18'),
('后羿','2024-06-30 15:00:00','2024-06-30 17:01:05');
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
相关文章:

大数据面试SQL(三):每分钟在线直播人数
文章目录 每分钟在线直播人数 一、题目 二、分析 三、SQL实战 四、样例数据参考 每分钟在线直播人数 一、题目 有如下数据记录直播平台主播上播及下播时间,根据该数据计算出平台每分钟的在线直播人数。 这里用主播名称做统计,前提是主播名称唯一…...

python中执行mysql操作并将python脚本共享
mysql下载路径: MySQL :: MySQL Community Downloads [root2 ~]# vim py001.py a3 b4 print(ab) print(a**2b**2) [root2 ~]# python py001.py 7 25 [root2 ~]# python3 >>> import random >>> random <module rando…...

HTTP、HTTPS、SOCKS5三种协议特点
在互联网通信中,HTTP、HTTPS和SOCKS5是三种至关重要的协议,它们各自具有独特的特点和应用场景。本文将详细探讨这三种协议的特点,帮助读者更好地理解它们在网络通信中的作用。 一、HTTP协议特点 HTTP(Hypertext Transfer Protoc…...

在ubuntu、centos、openEuler安装Docker
目录 ubuntu、centos、openEuler安装Docker 1.在 Ubuntu 上安装 Docker 1. 1 更新软件包 1. 2 安装必要的依赖 1.3 添加 Docker 的 GPG 密钥 1.4 添加 Docker 仓库 1.5 更新软件包 1.6 安装 Docker 1.7 启动并启用 Docker 服务 1.8 验证安装 1.9 运行测试容器 1.10…...

公共命名空间的例子3
有这样一个句子 用x语言解释[12*3]。 在x语言中,不符合“先乘除后加减”,这个句子应该怎样解释呢? 第一步,进行词法分析,目的是识别出注释和字符串,其中可能包括任意符号,干扰编译过程。 第二步…...

【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等)
【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等) 文章目录 1、分布式存储架构(软件定义存储SDS,超融合基础架构HCI)2、存储类型(块存储,…...

第31课 Scratch入门篇:小画家(舞台上画画)
小画家(舞台上画画) 故事背景: 在舞台上选择画笔和颜色,进行画画 程序原理: 这节课我们继续练习画笔功能,通过画笔功能我们设计一个小画板,碰到哪种颜色画笔就切换成哪种颜色。 开始编程 1、绘制一大一小的黑色圆形,小的命名为画笔,大的圆形命名为black(黑色) 2、鼠…...

QT UI界面之ListView
文章目录 概述源码怎么用代码qt design 小结 概述 本来把布局文件那块写了一遍,但是看看都跟之前那篇差不多,就换了一个稍微有点难度的,也很常用的listview来写了。来看看,有什么好玩的。 源码 先看下源码,如下&…...

freeRTOS互斥量(mutex)
目录 前言 一、互斥量概述 二、互斥量函数 1.创建 2.其他函数 三、优先级反转示例 1.概念 2.代码示例 四、优先级继承 1.概念 2.代码示例 五、递归锁 1.死锁的概念 2.自我死锁 3.函数 4.递归锁代码示例 前言 在之前的信号量中,我们想要实现互斥的…...

基于GeoTools使用JavaFx进行矢量数据可视化实战
目录 前言 一、JavaFx展示原理说明 二、GeoTools的Maven依赖问题 三、引入Geotools相关的资源包 四、创建JavaFx的Canvas实例 五、JavaFx的Scene和Node的绑定 六、总结 前言 众所周知,JavaFx是Java继Swing之后的又一款用于桌面应用的开发利器。当然࿰…...

zabbix的setup无法进入第二步
注意-部署时,报错要看的日志不止一个,php日志的报错也要看的,nginx接收到请求后是转发到php-fpm的 [rootweb01-84-41 ~]# chmod -R 777 /var/lib/php/session chmod: 无法访问"/var/lib/php/session": 没有那个文件或目录 [rootweb…...

代码随想录算法训练营第四十六天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇
一、115. 不同的子序列 题目链接:115. 不同的子序列 - 力扣(LeetCode) 文章讲解:代码随想录 (programmercarl.com)——115. 不同的子序列 视频讲解:动态规划之子序列,为了编辑距离做铺垫 | LeetCode&#x…...

宝塔安装nginx失败报错“检测到系统组件wget不存在,无法继续安装”
宝塔安装nginx失败报错“检测到系统组件wget不存在,无法继续安装” 问题描述解决方案 问题描述 在宝塔中安装lnmp环境时,安装nginx失败报错:检测到系统组件wget不存在,无法继续安装 如下图所示 通过检查发现系统是已经安装了wge…...

C++之运算符重载系列深入学习:从入门到精通!
为什么需要对运算符进行重载 C预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其…...

国赛分析。。。。
山东 6散落2两元素 浙江 8散落两元素 安徽不公布 4散落2元素 120s 华南 8散落两元素 西部 8散落两元素 华北 8 2.。。。 华东 东北 路边6张两元素...

无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案 1.Dify 简介 1.1 功能情况 Dify,一款引领未来的开源大语言模型(LLM)应用开发平台,革新性地融合了后端即服务(Backend as a Service,BaaS)与LLMOps的精髓,为开发者铺…...

PLSQL导入导出ORACLE数据提示失败问题修改PLSQL配置
oracle中plsql导入提示无法导入问题 1.首先看下是否环境变量已经配置(具体配置看下面环境变量配置) 2.plsql数据导入中tools-->Preferences中配置如下框中的内容 3.设置 tnsnames.ora文件中看下是否设置有问题 4.PLSQL乱码问题 NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16…...

从Shift+F6到雪花算法:IDEA开发中的那些坑与解法
在日常开发中,提升代码质量和开发效率是每个开发者追求的目标。作为 Java 开发者常用的集成开发环境,IntelliJ IDEA 提供了丰富的功能与快捷键,帮助我们更快速、更高效地完成日常工作。然而,即便是如此强大的工具,也会…...

Linux知识点总结
学习目标 常见的快捷键 Linux 是一个开源的类 Unix 操作系统,广泛应用于服务器、桌面和嵌入式系统。以下是一些重要的 Linux 知识点总结: 基础概念 文件系统:Linux 使用层次化的文件系统结构,根目录为 /,其他目录如 …...

Gradio 快速开发网页应用
Gradio 是一个开源的 Python 框架,可以快速开发页面,Gradio 主要用于 AI 模型 Demo 的开发,通过几行代码可以快速生成一个 Web Demo,由于 AI 算法工程师使用的都是 Python 语言,使用 Python 开发 Demo 会相对简单&…...

spring使用validation参数及全局异常检测
1.validation参数验证工具 1.1.validation-api技术链 validation-api是一个Java的数据校验规范,它定义了一套用于校验Java Bean的API。它是JSR 303规范的一部分,也被称为Bean Validation。validation-api提供了一系列的注解,用于在Java类的…...

学习笔记 韩顺平 零基础30天学会Java(2024.8.8)
P492 第三代日期使用 P493 第三代日期方法 P495 String翻转 作业代码见chapter12homework 对于需要异常处理的情况,可以通过这种想法得到: P495 注册处理题 P496 字符串统计 P497 String内存布局测试题 P498 常见类阶段梳理 P499 集合介绍 集合的使用并不…...

45.跳跃游戏
:双层for。复杂度n*n n class Solution {public int jump(int[] nums) {// 找到所有的条约方法,返回其中的最小次数// 从后向前,依次记录到最后的次数int n nums.length;if(n 1) return 0;// int[] temp new int[n];// temp[n-1] 0;fo…...

Golang | Leetcode Golang题解之第328题奇偶链表
题目: 题解: func oddEvenList(head *ListNode) *ListNode {if head nil {return head}evenHead : head.Nextodd : headeven : evenHeadfor even ! nil && even.Next ! nil {odd.Next even.Nextodd odd.Nexteven.Next odd.Nexteven even.N…...

【ARM】CMSIS 软件标准接口
目录 CMSIS:Cortex Microcontroller Software Interface Standard1. 概述2. CMSIS-Core2.1 概述2.2 关键组件2.3 示例代码2.4 详细解释 3. CMSIS-DSP3.1 概述3.2 关键组件3.3 示例代码3.4 详细解释 4. CMSIS-RTOS4.1 概述4.2 关键组件4.3 示例代码4.4 详细解释 5. C…...

Qt 小功能:加载等待动画——转圈圈
加载等待动画实现——转圈圈 效果图:(看封面最好) 关键要点 流畅的动画: 使用 QTimer 每 50 毫秒更新一次动画,确保动画流畅。 视觉效果: 使用 QPainter 的平滑像素转换和抗锯齿选项,提高动画…...

【Linux进程篇】进程终章:POSIX信号量线程池线程安全的单例模式自旋锁读者写者问题
W...Y的主页 😊 代码仓库分享 💕 前言:在之前的进程间通信时我们就讲到过信号量,他的本质就是一个计数器,用来描述临界资源的一个计数器。我们当时使用电影院的例子来说明信号量。电影院的座位被我们称为临界资源&a…...

MathType7.5破解版下载安装激活图文详细教程(附激活秘钥)
🌟 引言:揭秘MathType,数学编辑的瑞士军刀! 嘿,各位小伙伴,今天我要给你们安利一个我超级喜欢的数学神器——MathType!如果你跟我一样,在处理数学公式时常常感到头疼,那你…...

2-62 基于MATLAB gui 编制短波通信系统
基于MATLAB gui 编制短波通信系统,录制一段语音信号,分别通过AM SSB DSB 等调制信号,加入噪声,然后解调出来,可比较各种调制解调方式的优劣。程序已调通,可直接运行。 2-62 matlab gui - 小红书 (xiaohongs…...

windows C++-C++/WinRT 中创建组件和事件(下)
跨 ABI 的简单信号 如果无需连同事件传递任何形参或实参,则可以定义自己的简单 Windows 运行时委托类型。 以下示例展示 Thermometer 运行时类的更简易版本。 它声明名为 SignalDelegate 的委托类型,然后使用该类型来引发信号类型事件,而不是…...