SQL同时在线问题的解法

news/2023/6/8 0:16:58

前言
同时在线相关的问题,在很多行业中也经常出现,比如:

  • 统计同时最大主播数量
  • 统计同时最大在线人数
  • 统计同时最大打车人数

很多人看到这类题,一脸懵逼,甚至连题意都看不懂,但是这道题是面试题中的常客,需要格外关注,尤其是互联网大厂喜欢考察,下面以统计某视频app同时在线最大主播数量为例

数据准备
1,2022-10-09 12:12:12,2022-10-09 18:12:12
2,2022-10-09 13:12:12,2022-10-09 16:12:12
3,2022-10-09 13:15:12,2022-10-09 20:12:12
4,2022-10-09 15:12:12,2022-10-09 16:12:12
5,2022-10-09 15:18:12,2022-10-09 20:12:12
1,2022-10-09 20:12:12,2022-10-09 23:12:12
6,2022-10-09 21:12:12,2022-10-09 23:15:12
7,2022-10-09 22:12:12,2022-10-09 23:10:12

共三列,第一列主播id、第二列上线时间、第三列下线时间

思路分析

同时在线的含义:同一时间点(一般精确到秒)在线。
最大人数:每秒都有新上线和下线的主播,需要求出最大的那一秒的人数

 

利用开窗函数累加

基本思想:上线一人加1,下线一人减1
代码思路:

  1. 将数据进行拆分,开播的记录标为 1,关播的记录记为-1,然后union在一起
  2. 将数据按照时间进行升序排序,然后对上下线标记的字段按时间顺序累加求和
  3. 累加的最大值就是同时在线的最多人数

代码如下:

select id, class, max(b.curr_online_cnt) from(SELECT a.id,a.class,a.tt,a.flag,sum(a.flag) over (partition by class ORDER BY a.tt) AS curr_online_cnt FROM(SELECT id,class,begintime AS tt,1 AS flag FROM view1UNION ALLSELECT id,class,endtime AS tt,-1 AS flag FROM view1)a ORDER BY id
)b GROUP BY class;

SQL窗口函数OVER用法整理
OVER的定义
OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。

语法

OVER ( [ PARTITION BY column ] [ ORDER BY culumn ] [ROWS|RANGE BETWEEN 边界规则1 and 边界规则2])


PARTITION BY 子句进行分组;
ORDER BY 子句进行排序;
ROWS|RANGE 框架是对窗口进行进一步的分区,框架有两种范围限定方式:一种是使用ROWS子句,通过指定当前行之前或之后的固定数目的行来限制分区中的行数;另一种是RANGE子句,按照排序列的当前值,根据相同值来确定分区中的行数。
窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。

RANGE表示按照值的范围进行范围的定义,而ROWS表示按照行的范围进行范围的定义;边界规则的可取值见下表

在这里插入图片描述
用法
OVER开窗函数必须与聚合函数或排序函数一起使用,聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。

 

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

吕校长的翻译 | AWS新推出良好架构框架第6大支柱:可持续性支柱

更多技术内容参见吕昭波2022年出版《云端架构》一书,新书发布第一天便荣登京东计算机新书热卖榜TOP 1,购买及预览请在京东、当当、淘宝中搜索《云端架构》。 早在2015年,AWS推出的良好架构框架就已经在帮助用户改进优化基于云平台的架构。之前…

数据中台的四大支柱

数据中台的四大支柱01 我们在谈「数据中台」的时候,到底在谈论什么?02 数据中台支柱一:产品导向03 数据中台支柱二:数据服务04 数据中台支柱三:敏捷团队05 数据中台支柱四:培训赋能写在最后的话来源&#x…

数据中台即服务——数据中台的四大支柱

作者丨石秀峰全文共4416个字,建议阅读10分钟中台概念,2015年诞生,2019年爆火,在最火的时候被很多人当成了“无所不能”的“万能药”,只要是IT的问题,就一个药方——上“中台”!于是乎&#xff0…

基于paddlex图像分类模型训练(一):图像分类数据集切分:文件夹转化为imagenet训练格式

背景 在使用paddlex GUI训练图像分类时,内部自动对导入的分类文件夹进行细分,本文主要介绍其图像分类数据切分源码,或可作为其他项目储备代码:https://github.com/PaddlePaddle/PaddleX/blob/develop/paddlex/tools/dataset_spli…

7、CenOS6安装Nginx

Nginx的安装与启动 什么是Nginx Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔西索夫(Igor Sysoev)所开发,官方测试 nginx 能够支支撑 5 万并发链接…

房价下降刚刚开始

一是写出房地产市场中真实的数据、信息,民众的真实感受,直面各种问题;二是理性反思。两年后,中国房地产市场已经发生非常大的变化。这样表述或者并不准确。确切的说法,应该是,影响中国房地产市场的各种因素…

楼市调侃:假如上海房价一夜之间降到800元/平米

几天前和俩哥们聊天。说起上海芝麻开花般的房价无不咋舌。忽我提问:假如由于不可抗拒的因素,上海的房价从现在的均价8000元/平米,一夜之间暴跌至800元/平米,将出现怎样的情景? 于是,三人插上想象的翅膀&am…

使用以下商品房销售记录表数据,用梯度下降法,编程实现一个房价预测系统

题目描述 使用以下商品房销售记录表数据,用梯度下降法,编程实现一个房价预测系统。 求解原理 给定的数据集dataSet,每一行代表一组数据记录,每组数据记录中,第一个值为房屋面积(单位:平方米…