经典sql题(七)查找直播间最大在线人数

news2024/9/19 10:44:18

使用 SQL 分析房间用户状态变化

本文将详细介绍如何使用 SQL 的窗口函数和聚合函数,分析用户在房间中的状态变化,目标是计算每个房间指定时间段内的最大用户状态。

示例数据

假设我们的数据表包含以下字段:

room_iduser_idlogin_timelogout_time
10112023-03-10 12:05:002023-03-10 12:45:00
10122023-03-10 12:10:002023-03-10 12:50:00
10232023-03-10 12:00:002023-03-10 13:00:00
10242023-03-10 12:30:002023-03-10 13:30:00

第一步:提取事件并标记类型

在这一步,我们将从原始数据中提取每个用户的登录和退出事件,并为每个事件分配一个类型标记(1 表示登录,-1 表示退出)。

提取登录事件
SELECT 
    room_id,
    user_id,
    UNIX_TIMESTAMP(login_time) AS event_time,
    1 AS user_type
FROM 
    table
WHERE 
    FROM_UNIXTIME(UNIX_TIMESTAMP(login_time), '%Y%m%d') = '20210310'
    AND (HOUR(login_time) BETWEEN 12 AND 13)
结果示例
room_iduser_idevent_timeuser_type
101116153755001
101216153758001
102316153752001
102416153770001
提取退出事件
SELECT 
    room_id,
    user_id,
    UNIX_TIMESTAMP(logout_time) AS event_time,
    -1 AS user_type
FROM 
    table
WHERE 
    FROM_UNIXTIME(UNIX_TIMESTAMP(logout_time), '%Y%m%d') = '20210310'
    AND (HOUR(logout_time) BETWEEN 12 AND 13)
结果示例
room_iduser_idevent_timeuser_type
10111615377900-1
10121615378200-1
10231615378800-1
10241615379400-1
合并结果

我们将登录和退出事件通过 UNION ALL 合并,以获得完整的事件列表。

SELECT 
    room_id,
    user_id,
    event_time,
    user_type
FROM (
    -- 登录事件
    SELECT 
        room_id,
        user_id,
        UNIX_TIMESTAMP(login_time) AS event_time,
        1 AS user_type
    FROM 
        table
    WHERE 
        FROM_UNIXTIME(UNIX_TIMESTAMP(login_time), '%Y%m%d') = '20210310'
        AND (HOUR(login_time) BETWEEN 12 AND 13)
    UNION ALL
    -- 退出事件
    SELECT 
        room_id,
        user_id,
        UNIX_TIMESTAMP(logout_time) AS event_time,
        -1 AS user_type
    FROM 
        table
    WHERE 
        FROM_UNIXTIME(UNIX_TIMESTAMP(logout_time), '%Y%m%d') = '20210310'
        AND (HOUR(logout_time) BETWEEN 12 AND 13)
) AS events
合并结果示例
room_iduser_idevent_timeuser_type
101116153755001
101216153758001
102316153752001
102416153770001
10111615377900-1
10121615378200-1
10231615378800-1
10241615379400-1

第二步:计算累积用户状态

使用窗口函数累积计算用户状态。

SELECT
    room_id,
    user_id,
    user_type,
    SUM(user_type) OVER (PARTITION BY room_id ORDER BY event_time) AS status
FROM (
    -- 上一步的查询
) AS events

结果示例

room_iduser_iduser_typestatus
101111
101212
1011-11
1012-10
102311
102412
1023-11
1024-10

第三步:求最大状态

通过聚合函数求每个房间的最大状态。

SELECT
    room_id,
    MAX(status) AS max_status
FROM (
    -- 上一步的状态查询
) AS status_calculation
GROUP BY
    room_id;

结果示例

room_idmax_status
1012
1022

解析

  • 数据准备:合并登录和退出事件,标记事件类型。
  • 计算状态:使用 SUM() OVER 计算累积状态。
  • 求最大状态:通过 MAX(status) 获取最大用户状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ai扩图用什么软件?探索五大高效工具

Hey朋友们,最近在社交媒体上看到不少超清晰的美图,是不是特别羡慕? 别急,告诉你个秘密武器——ai扩图软件。这些神器能帮你智能扩展图片内容,让每张图都充满细节。 想知道都有哪些好用的ai扩图软件免费吗&#xff1f…

CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载

场景 Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试: Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试_微软消息队列 测试工具-CSDN博客 Windows服务器上Mqtt服务器EMQX的安装使用: Windows服务器上Mqtt服务器EMQX的安装使用_wi…

Objects as Points基于中心点的目标检测方法CenterNet—CVPR2019

Anchor Free目标检测算法—CenterNet Objects as Points论文解析 Anchor Free和Anchor Base方法的区别在于是否在检测的过程中生成大量的先验框。CenterNet直接预测物体的中心点的位置坐标。 CenterNet本质上类似于一种关键点的识别。识别的是物体的中心点位置。 有了中心点之…

Python青少年简明教程:tkinter库入门

Python青少年简明教程:tkinter库入门 tkinter是Python的标准GUI(图形用户界面)库。它提供了一种快速而简单的方法来创建GUI应用程序。tkinter是Python自带的,无需额外安装,随 Python 安装包一起提供。 在Python 3.x中…

Leetcode—1137. 第 N 个泰波那契数【简单】

2024每日刷题(160) Leetcode—1137. 第 N 个泰波那契数 记忆化搜索实现代码 class Solution { public:int tribonacci(int n) {int zero 0;int one 1;int two 1;if(n 0) {return zero;}if(n 1) {return one;}if(n 2) {return two;}int ans 0;fo…

三重因素,巨人瘦身——从 IBM中国研发部裁员讲起

如何看待IBM中国研发部裁员?近日,IBM中国宣布撤出在华两大研发中心,引发了IT行业对于跨国公司在华研发战略的广泛讨论。这一决定不仅影响了众多IT从业者的职业发展,也让人思考全球化背景下中国IT产业的竞争力和未来发展方向。面对…

手机、平板电脑编程———未来之窗行业应用跨平台架构

一、平板编程优点 1. 便携性强 - 可以随时随地携带平板进行编程,不受地点限制,方便在旅行、出差或休息时间进行学习和开发。 2. 直观的触摸操作 - 利用触摸屏幕进行代码编辑、缩放、拖动等操作,提供了一种直观和自然的交互方式。 …

TypeScript:高级类型

一、交叉类型(Intersection Types) 交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。 例如, Person & Serializable & Loggable同时是 Person …

建模杂谈系列256 规则函数化改造

说明 之前尝试用FastAPI来构造规则,碰到的问题是由于请求量过大(TPS > 1000), 从而导致微服务端口资源耗尽。所以现在的point是: 1 如何使用函数来替代微服务(同时要保留使用微服务的优点)2 进一步抽象并规范规则的执行3 等效合并规则的方法 内容 0 机制讨论…

Vue2源码解读

vue源码_哔哩哔哩_bilibili 1.Vue源码路径目录解读 Vue2源码的路径目录被设计得非常清晰,每个文件夹都承担着特定的职责和功能。以下是这些主要文件夹(compiler、core、platform、server、sfc、shared)的详细解读: 1. compiler …

LLM大模型部署实战指南:Ollama简化流程,OpenLLM灵活部署,LocalAI本地优化,Dify赋能应用开发

1. Ollama 部署的本地模型(🔺) Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。,这是 Ollama 的官网地址:https://ollama.com/ 以下是其主要特点和功能概述: …

VLMEvalKit 评测实践:InternVL2 VS Qwen2VL

一、InternVL2简介 InternVL2是由上海人工智能实验室OpenGVLab发布的一款多模态大模型,其中文名称为“书生万象”。该模型在多学科问答(MMMU)任务上表现出色,成为国内首个在该任务上性能突破60的模型,被誉为开源多模态…

k8s 微服务 ingress-nginx 金丝雀发布

目录 一 什么是微服务 二 微服务的类型 三 ipvs模式 3.1 ipvs模式配置方式 四 微服务类型详解 4.1 clusterip 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 loadbalancer 4.5 metalLB 4.6 externalname 五 Ingress-nginx 5.1 ingress-nginx功能 5.2 部署…

5. Python之数据类型

Python数据类型有数值型,字符串型,布尔型等等 内置函数type(),可以查看变量的数据类型 。 一、数值类型 整数(没有小数部分,包含正整数,负整数,0,默认为十进制数)&…

C++ 类域+类的对象大小

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 类定义了一个新的作用域,类的所有成员都在类的作用域中&#xff…

华为杯数学建模资料大全、入门指导攻略、获奖数据分析、选题建议

这里收集的资料个人认为已经非常全也非常值了,这么多资料收集成本真的不低 数学建模比赛资料部分(需要私聊找我) 华为杯创办以来每一年的比赛题目原题(包括A到F题)华为杯每年每种题目的优秀获奖作品论文 近几年的华…

2022高教社杯全国大学生数学建模竞赛C题 问题一(2) Python代码演示

目录 1.2 结合玻璃的类型,分析文物样品表面有无风化化学成分含量的统计规律数据预处理绘图热力图相关系数图百分比条形图箱线图小提琴图直方图KED图描述性统计分析偏度系数峰度系数其它统计量1.2 结合玻璃的类型,分析文物样品表面有无风化化学成分含量的统计规律 数据预处理 …

回归预测|基于鲸鱼优化随机森林数据的数据回归预测Matlab程序 多特征输入单输出WOA-RF

回归预测|基于鲸鱼优化随机森林数据的数据回归预测Matlab程序 多特征输入单输出WOA-RF 文章目录 一、基本原理鲸鱼优化算法(WOA)随机森林(RF)WOA-RF的结合总结 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 WOA-R…

服务器断电重启后报XFS文件系统错误 XFS (dm-0)_ Metadata I_O error

一、现象 服务器被意外断电,导致重启机器后报错,系统错误 XFS (dm-0): Metadata I/O error 二、解决方法 2.1 重启服务器,进入单用户模式 服务器系统为: centos7.9 开机按e 定位到ro 然后修改ro为rw(“rw init/sysroot/bin/sh”…

2024-1.2.12-Android-Studio配置

本地博客: https://k1t0111.github.io/ K1T0 最近在做一些app方向的移动技术开发学习,但是由于AS的配置问题,市面上找不到最新的2024版本的AS的相关配置。笔者也是踩了很多坑,因此想写一篇文章记录一下最新的AS 2024 1.2.12的对应java环境的一…