当前位置: 首页 > news >正文

大数据面试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下载路径&#xff1a; ​​​​​​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三种协议特点

在互联网通信中&#xff0c;HTTP、HTTPS和SOCKS5是三种至关重要的协议&#xff0c;它们各自具有独特的特点和应用场景。本文将详细探讨这三种协议的特点&#xff0c;帮助读者更好地理解它们在网络通信中的作用。 一、HTTP协议特点 HTTP&#xff08;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语言中&#xff0c;不符合“先乘除后加减”&#xff0c;这个句子应该怎样解释呢&#xff1f; 第一步&#xff0c;进行词法分析&#xff0c;目的是识别出注释和字符串&#xff0c;其中可能包括任意符号&#xff0c;干扰编译过程。 第二步…...

【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等)

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

第31课 Scratch入门篇:小画家(舞台上画画)

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

QT UI界面之ListView

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

freeRTOS互斥量(mutex)

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

基于GeoTools使用JavaFx进行矢量数据可视化实战

目录 前言 一、JavaFx展示原理说明 二、GeoTools的Maven依赖问题 三、引入Geotools相关的资源包 四、创建JavaFx的Canvas实例 五、JavaFx的Scene和Node的绑定 六、总结 前言 众所周知&#xff0c;JavaFx是Java继Swing之后的又一款用于桌面应用的开发利器。当然&#xff0…...

zabbix的setup无法进入第二步

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

代码随想录算法训练营第四十六天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇

一、115. 不同的子序列 题目链接&#xff1a;115. 不同的子序列 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com)——115. 不同的子序列 视频讲解&#xff1a;动态规划之子序列&#xff0c;为了编辑距离做铺垫 | LeetCode&#x…...

宝塔安装nginx失败报错“检测到系统组件wget不存在,无法继续安装”

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

C++之运算符重载系列深入学习:从入门到精通!

为什么需要对运算符进行重载 C预定义中的运算符的操作对象只局限于基本的内置数据类型&#xff0c;但是对于我们自定义的类型是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算&#xff0c;这个时候就需要我们对这么运算符进行重新定义&#xff0c;赋予其…...

国赛分析。。。。

山东 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开发中的那些坑与解法

在日常开发中&#xff0c;提升代码质量和开发效率是每个开发者追求的目标。作为 Java 开发者常用的集成开发环境&#xff0c;IntelliJ IDEA 提供了丰富的功能与快捷键&#xff0c;帮助我们更快速、更高效地完成日常工作。然而&#xff0c;即便是如此强大的工具&#xff0c;也会…...

Linux知识点总结

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

Gradio 快速开发网页应用

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

基于XGBoost与SHAP的分子气味预测:从特征工程到可解释性分析

1. 项目概述与核心价值在香水设计、食品风味工业乃至环境监测领域&#xff0c;一个核心且持久的挑战是&#xff1a;如何从分子的化学结构出发&#xff0c;准确预测其气味&#xff1f;这不仅仅是化学家或调香师的直觉游戏&#xff0c;更是一个复杂的、高维度的模式识别问题。传统…...

如何快速掌握开源UE资产编辑器:UAssetGUI完整配置与实战指南

如何快速掌握开源UE资产编辑器&#xff1a;UAssetGUI完整配置与实战指南 【免费下载链接】UAssetGUI A tool designed for low-level examination and modification of Unreal Engine game assets by hand. 项目地址: https://gitcode.com/gh_mirrors/ua/UAssetGUI UAss…...

为什么92%的DeepSeek二次开发团队在6个月内遭遇交付延迟?——基于17个真实项目的技术债务归因分析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的DeepSeek二次开发团队在6个月内遭遇交付延迟&#xff1f;——基于17个真实项目的技术债务归因分析 在对17个采用DeepSeek-R1/VL模型开展定制化开发的工业级项目进行回溯审计后&#xff0c;我…...

Unity事件系统实战:用事件驱动重构你的金币拾取逻辑(告别硬编码)

Unity事件系统实战&#xff1a;用事件驱动重构你的金币拾取逻辑&#xff08;告别硬编码&#xff09;在游戏开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;玩家拾取金币后&#xff0c;需要更新UI、播放音效、解锁成就、保存数据……如果把这些逻辑全部写在金币拾取的代…...

PvZ Toolkit终极指南:三步掌握植物大战僵尸最强修改器

PvZ Toolkit终极指南&#xff1a;三步掌握植物大战僵尸最强修改器 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PvZ Toolkit是一款专为植物大战僵尸PC版设计的综合修改器工具&#xff0c;能够让你…...

Lovable电商网站搭建:如何用不到3人技术团队,72小时内上线PCI-DSS合规MVP版本?

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Lovable电商网站搭建 Lovable 是一个面向中小商户的轻量级电商解决方案&#xff0c;采用现代 Web 技术栈构建&#xff0c;强调可扩展性、用户体验与快速部署能力。本章将指导你从零开始搭建一个具备商品展示、…...

XXPermissions:Android权限管理框架的架构设计与最佳实践

XXPermissions&#xff1a;Android权限管理框架的架构设计与最佳实践 【免费下载链接】XXPermissions Android Permissions Framework, Adapt to Android 16 项目地址: https://gitcode.com/GitHub_Trending/xx/XXPermissions 在Android应用开发中&#xff0c;权限管理一…...

树莓派Zero离线语音交互实战:TTS与STT引擎部署与优化

1. 项目概述&#xff1a;为什么选择树莓派 Zero 来实现语音功能&#xff1f;如果你玩过 Arduino、ESP32 这类微控制器&#xff0c;也接触过树莓派 4B 这样的单板电脑&#xff0c;那你大概能理解那种“选择困难症”&#xff1a;微控制器实时性强、功耗低&#xff0c;但算力有限&…...

【国家级攻防演练级建议】:DeepSeek私有化部署中4类隐蔽后门植入路径与实时检测方案

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek私有化部署中隐蔽后门植入的攻防对抗本质 在私有化场景下&#xff0c;DeepSeek模型的部署链路常跨越镜像构建、权重加载、推理服务启动及API网关接入等多个环节。攻击者可利用构建上下文污染、依赖包劫…...

Playwright文件上传避坑指南:遇到动态生成的文件选择框怎么办?

Playwright文件上传避坑指南&#xff1a;动态生成文件选择框的实战解决方案最近在为一个电商平台做自动化测试时&#xff0c;遇到了一个棘手的问题——商品图片上传功能总是失败。页面上的"上传图片"按钮明明可以点击&#xff0c;但传统的set_input_files()方法却毫无…...