00:00
好的同学们,那接下来呢,我们看一下我们的第五题叫同时在线问题啊呃,那么这个题呢,是这样子的,我们来读一下这个题啊,他说如下为某直播平台主播的开播及关播时间,那也就是说第一个字段ID表示主播的唯一标识,对吧?那么第二个字段叫std start。啊,就是它的一个开播时间,那这个就是它的一个关播时间,也就是所谓的下播时间,OK,那现在由于疫情的影响,呃,那我们知道线上直播平台,包括我们的在线教育啊等等都非常的火爆,所以说这些公司呢,在于大数据这块招人的时候也是非常多的一个,提供了非常多的一个岗位和就业机会,所以我们在提炼过程当中发现了一个直播当中比较有意思的题,就是这个题啊好,那这是我们的数据,接下来他让我们求什么内容呢?他让我们根据当前这个数据计算出该平台最高峰同时在线主播的人数。
01:08
啊呃,那这个呢,其实从题意上来说也不难理解对吧,那么我们看一下诶1001,从这个12:12一直播到18:12,那在期间有13点,同时会有15点对吧,15点这中间呢,同时有3425这几个人都会上线,那在我下播之前,是不是这几个人都同时在线。对吧,那我们要求的是同时在线的最高峰,OK,那我还是一样的把这个数据呢,粘贴到咱们的这块。啊呃,方便我们等会去处理,同时我将这个内容呢,还是把它变成一个circle的模样啊,那这么三个字段,然后接下来呢,我们可以写这个circle,但写circle之前我们首先得分析。呃,那他要的是这个同时在线人数,也就是说某一个主播开播以后其他主播。
02:08
陆续上线,在我当前这个主播没有下线的时候,那我就是跟其他主播同时在线,但是这种数值关系上非常复杂,比假如说我们是按照开播时间做的一个排序啊,那么开播时间呢,将会是这样的一个。线条,也就是说现在我们数据其实就是按照开播时间来排的序啊,但是关播时间怎么样不确定,哎,有可能是这样。这个人呢,开播啊,有的人呢这样。有可能有的人拨的时间比较长,有的人拨的时间呢比较短,那其实我们要小的数据就是从这无论从哪个竖杠画下来怎么样。所交叉的这个线条这个点数最多啊,那这是我们直观感受到的,但是从这个角度来说,我们的色比较难写。
03:05
不太好写,呃,那我们转换思维,其实我们在生活当中多多少少都看过直播,或者说有的小伙伴们正在呃这个B站看当前学习咱们这个开课的一个过程,那如果说正在B站上。学习的同学啊,可以看一下你B站上的左下角是不是有一个同时在线人数。好,那我们就从这个流失的数据来考虑一下啊,那这个同时在线人数它是怎么得到的。是不是比如说有一个人打开了我当前这个视频,它就加一,然后有一个人把这个视频关掉了,那这个人数是不是减一,它是从流逝数据的角度来考虑的,那当前我们这个地方能不能从流逝数据角度来考虑呢?啊,当然可以的,那你比方说我把这个数据呢,写成这个样子,在所有的STT后面我写一个正一,在e dt后面写一个负一,然后我把全局的时间做一个排序。
04:12
累加,求一和负一的结果。啊。是不是就OK了?从第一行到当前行去求一下累加的结果,也就是截止到当前这个时刻,总共有多少人在线?啊,也就是说我们这道题啊,就转换为流式。数据的怎么样处理角度叫流失啊。用流逝的一个思想来处理当前这个内容啊呃,那接下来呢,我们就写一下这个搜个实现啊,第一步啊。将对这个。数据。
05:00
分类啊对数据分类将开始数据。或者说在开始数据后添加正。一表示。由主播上线对不对啊,同时在。同时,在官波。数据后添加什么负一?表示。由主播。下线。啊好,那也就是说我们要把两部分数据呢,给它unit起来啊好,那我们写一下select,第一部分呢是ID叫ST。好,那我们取名叫DT啊,取变名,因为接下来我们要UI数据,所以要保证当前我们字段名称必须相同,然后呢,给一个正一,那表示一个用户,我就用一个P来表示from,这个地方呢,是我们的TEST5表啊,TEST5这张表啊,然后接下来呢,Union上我们的另外的数据,我把它复制一份往这一放,接下来这个位置呢,我们可以写上e dt,然后这个地方我们刚才说的叫负一,因为有一个人观博之后,整个平台就会少一个人,对吧?幽定起来,我们接下来把这个so口来运行一下啊,同理,我这边呢,还是已经把这个数据呢导做好了一个导入啊,来看一下这个数据行,那第一步呢,我们去运行一下这个结果,这个相对来说是比较简单的,其实我们自己应该也能想象到这个数据会长什么样子,然后接下来第二步,我们要对这个数据整体做排序。
06:57
按照时间排序求。
07:00
第一行到当前行总的有多少人对吧,那我们要求这样的一个内容,稍等我们来看一下啊,先把这个结果我们可以拿到。好了,那现在呢,我们就拿到了这样的一个结果,我们把它拿过来复制,然后呢,粘贴到我们第一个这个位置。啊好,这个呢,我们可以称为叫T1表对不对,好,那接下来呢,我们继续第二步就是排序求累加结果了啊第二步按照时间角排序计算累加人数。啊,就是说站在流逝的角度来看,呃,先来了一个人,那人数总人数加一,这个人下播了,那叫减一对吧,那但是呢,我们要按照整个时间,因为有可能连续的有主播上线,连续的有主播下线,所以呢,有可能我们连续的有很多个一啊,那接下来呢,我们要按照时间排序做累加计算,那就是C的,我们写一下ID啊,其实ID到现在为止呢,我们要不要已经无所谓了啊,DT保留,然后更重要的是some。
08:16
啊,Some呢,我们的P字段。对吧,然后开窗。叫old by,我们要的是从首行到当场all by dt,然后呢,我们叫some b,这是总人数同时在线的人数,对吧?每个时刻好,那从T1表当中把这个数据呢拿到,然后接下来我把T1表呢数据拿过来,放到前面加一个括号往这一放,接下来呢,我们可以运行一下我们的T1表啊,看一下这个结果应该是什么样子了。呃,这个结果呢,应该是按照时间排好序,然后接下来后面跟着一串数字对吧。
09:05
我们可以稍等一下我们的结果。这个还没有运行完,那我们不要着急。稍微等一下,那其实在这块大家可以按一个快进好,那最终呢,我们数据是这样子的,你比方说现在这个数据代表什么意思呢?看第一条数据表示1001主播上线对吧,第二条数据是1003上线,同时1004 1002 105都是上线,所以我们看到这后面的结果呢,是一个累加的。呃,那么接下来呢,应该是1003,怎么样。
10:02
下线,由于同时存在有两个人下线,对吧?看这是同一时刻,所以一瞬间直接由五个人变成三个人同时在线,那没有问题,从我们16:12:12这一刻开始,只有三个人同时在线,因为这一刻呢,同时有二三这两个主播同时下线,刚好就这么巧在同一秒下线的,如果说哪怕他们差一秒钟,那也就是说我们会看到四三。挨个下降的,你比方说1001,诶,他又下线了,所以由三个人变成两个人,所以这里边最大的呢是五,那我们差最后一步啊,差最后一步。第三步啊,这个呢,我们可以称为是T2表,第三步呢,就是计统计啊就找出。同时。在线人数最大值,那这个就比较简单了,那我们就可以select对吧。
11:00
叫max。Some啊,其实就是这个内容对吧,Some这个字段啊呃,那最大的人数from我们的T2表。接下来呢,在T2前面加一个括号,然后把我们的T2表呢拿过来。好拿到这,那接下来呢,我们可以把成体运行一下,其实最后一步不运行也一样了,因为我们已经看到最大值是几啊股,也就代表着最多同时有五个主播在线。啊,所以这一题呢,我们就搞定了,其实有的时候呢,我们得开放思维对吧?呃,在生活当中我们经常发现到,呃,看一个什么主播底下显示了同时在线人数有多少,那这个是从观众的角度来说的,呃,那主播上线下线跟我们观众进入当前这个直播间以及关闭当前直播间其实是一样的,那未来有可能大家在面试过程当中呢,遇到的就是说我一个直播间当中同时在线的最多人数应该怎么求跟。
12:06
当前这个思路是不是完全一样,大家可以思考一下。提供的数据可以是用户对吧,进入直播间啊,当然呢,那个时候可能对于这个用户信息呢,他得多加一个直播间的属性,因为我们一个用户在一个平台上面可以穿梭于多个直播间,对不对?OK,好,所以呢,你要考虑让直播间的一个点的话,其实我们就多一个直播间做分组而已,整体上思路还是一样的,可以用我们这种方案,就来一个人,我们加一,少一个人呢,我们减一就好了,好,那最终的答案是同时在线的有五个人,它的一个最高峰,那么到这块为止呢,我们的S就搞定了,也就是说有时候我们在离线数据思路不好整理的时候呢,我们可以转换思维,用流式的方式看能不能更好的去解决当前这个问题。
我来说两句