00:00
好,我现在直接跟大家说文档中思路啊,文档上思路呢,它大致是这样的啊,他先怎么做呢,他也是先把这个咱们是连续三周对吧,也是先把这三周每一周的活跃设备都先求出来。哎,这是本周的,这是上周的,这个呢是上上周的,是不是都求出来啊,但是他求出来之后呢,并没有进行周,他他怎么做的啊,他做了一个union。那当然是union奥啊,是union奥啊,那UN奥是不是不去虫啊,对吧?那OK union奥之后把这仨紫砂裙UNUN尼奥到一起了,是不是相当于得到了一个大虚表对不对?然后呢,他怎么做啊,它以它进行这个就是它以它以它为一个子查询,然后呢。从这里边选选数据,选完数据之后呢,按照谁分组啊。按照设备ID进行分组,那咱们这只有一个字段,是不是都选了一个设备ID啊,对吧?哎,按它进行分组,那这样会把什么样的数据分到一组呢?是不是会把相同的设备ID分到同一组里边,对不对?那它的过滤条就是这样的啊,只要你分完组之后,它对每一个组都进行一个聚合,就是count星啊,按设备ID分组,然后求一抗星啊,那相当于是不是对每组统计一下,每组一共有多少个呀,对吧,只要抗星。
01:13
等于三。只要抗氢乙酸。那就说明什么呀,说明这个设备ID,它就是一个连续三天活跃,连续三周活跃的。啊,为什么是这样的啊,咱们得思考一下。咱们思考一下啊,那首先我们得明确,我们在求这个三周的活跃的时候啊,是不是在对在每一周里边,我们是不是都对设备ID进行分组了,分组相当于就是啥去重,也就是在一个子查询,也就在一周当中,一个设备ID我们只能出现几次,只能出现一次,哎,这一次,这一次这一次。啊,那所以说你最终把它优念完之后,然后再对设备ID分组,如果说你这一组里边啊,它的个数是三,一个组的个数是三,那就说明这三个这个数据是不是肯定分别来自于本周上周和上上周吧,对不对,因为在一周里边,我同一个设备ID我是不可能出现两次的吧,我最多只能有一次。
02:14
对不对,所以说你只要呃后续你这个分组之后,你的抗芯等于三,那就说明这三个呀,肯定是分别来自于每一周的啊,分别来自于什么,那既然是分别来自于每周,是不是就说明他在最近的三周连续活跃了呀,就是这个道理啊,这是文档的思路,你看他这么写的话,是不是根本就没有涉及到这个多表join啊对不对,要好一些啊啊大家看一看它具体的实现啊,具体实现其实可以借助于我们刚才所写的这个啊,首先先把它拿出来。啊,这个是不是也是同样的道理,先拿到咱们本周啊,然后呢,再拿这个上周。啊,来CRV再拿这个上上周啊,这个CRC咱们还用它就行啊来CRV好拿到这仨自然就拿到了,对吧?那文档思路怎么做,是不是对他们仨进行一个union all啊对吧?大家都知道union all的语法是什么样的,还记得不是不是只能是select直接加union对不对啊,然后呢,这多个select union之后,他们这个效果是什么样的来着,是不是相当于一个select的呀,对不对,那也是这个,这仨东西现在是不是相当于是一个select查询,那我们要做的是什么?是不是从这里边去选数据,然后呢,对设备ID进行分组啊对不对?来,那接下来我们先,既然你需要从这里边去select,那所以说你需要对它怎么做呀,是不是起别名啊得。
03:36
来,我们先给它CTRLX放到这个括号里边来啊。来位,那你需要对它起一个别名,比如说就叫做T吧,啊,那我们要做的呢,就是select select,然后呢,诶,From from下边这个东西对不对啊,那这时候咱们需要对它进行啥进行分组,那grow by啊,J group by谁by mid呗。
04:02
对不对,是按照设备ID分组啊,那这样一来我们会把什么样的数据分到一组,同样的设备ID分到一组,那有可能这一组里边呢,我的设备ID是一,这个是二,这个是三,那这个呢,可能里边有三条,那这个呢可能有两条,这个是不是可能有一条啊对不对,我们要找的什么样的,是有三条的那样的对不对,有三条的,那就说明它是三条都有的啊,那所以说我们这儿需要加一个过滤条件对不对,然后大家要注意了啊,我们现在过滤的是啥?过滤的是不是分完组之后的数据啊。对不对,然后大家要知道,我们过过滤分完组之后的数据还能用where吗?就不能用,应该用谁呀?应该用having啊,应该having,然后大家得得注意区分have和have和这个where的区别啊,我们have实际上你过滤的应该是啥。过滤的是组对不对,你放组之后是不是用having去过滤一组一组的数据啊,啊,那你的那个where呢,过滤的是啥呀?是一条一条数据对吧?啊,这个还是有区别的啊,有区别的,那所以说哈啊过滤是组,那咱们这个过滤条件应该怎么写呢?
05:06
注意啊,你这个having过滤条件呢,你写的时候也是有有要求的啊,Having我这儿肯定是某个字段,哎,等于什么对吧?啊,那这块你这块怎么写呀,能写的字段应该有谁呀。跟你select字段是一样的啊,就是分组之后啊,你having的字段只能是什么,只能是你分组的字段或者是啥,或者是聚合函数,能理解吧,那我们这应该是用谁啊,是不是用聚合函数,Count的星应该是等于三,这是我们想要的吧,啊,这是我们想要的。啊,那完了之后上边我们可以选啥呀,你这过滤完之后,它会返回的结果应该是什么样的。三方应该是什么样的,应该是那些count芯等于三的组吧,对不对,它过滤是组,所以说你上面select的东西啊,比如说我这假如说只写一个count星。
06:02
行不行?这是我们最终结果,不是不是。不是,这一定得注意一下啊,这抗星应该就是哪个抗星。这行是不是应该是你分组之后的抗星啊,应该是每组的抗星吧,对不对,如果说我这个S就真这么写,那你说这个最终这返回的结果应该是什么样的呀。就是这样,你说这个词它返回的结果是啥样的?应该是一大堆的三吧,对不对,那应该是33333是不是应该是这个,为啥啊,你想啊,这个康德氢是你分组之后的抗德氢,那这个康德星你过滤的是不是也是分组之后的抗德星啊,对不对,那你是不是相当于只把抗德星等于三的这样的组留下来了,完了之后呢,你上边你是不是还选了一个抗型啊。那是不是就相当于选的全是三对不对,那我们现在是想要这个结果吗?不是,我们想要结果应该是什么呀?因为count其等于三的一共有多少多少个吧,对不对?所以咱这只能怎么做呀,只能是不是再来一个紫查询对不对?那当然这没必要选康星,我们就选谁就行了,选m mid就行了,那这个这个m mid其实就是啥呀,就是那些连续三周活跃的mid吧,我们要数的就是这个有几个啊,那怎么数啊,只能是以这个东西作为一个子查询啊,Ctrl X select这一定得注意啊,这块容易就是容易出出错啊from来小括号来把咱们这个色L扔进来,CTRLV。
07:31
把这个往下推一下啊。嗯。应该是到哪到这个就到这个位置往前推一下。诶,嗯,一会我再调吧,一会再调吧,行,那这块呢,我们需要给它起一个这个别名啊,那我们比如说就叫做T1吧啊T1啊T啊,那完了之后我们上边呢,需要从这里边再选一个这个,呃,康乃星啊康乃星,那这个咱们得到的是不是才是最终那个,诶,连续三周活跃的设备的个数啊,这才是最终的那个个数啊。
08:02
啊,这块呢,大家一定得注意啊,一定得注意啊,主要在这儿了,咱们就说这么多啊啊那这个当然呢,还需要把上边我们所需的剩下的字段是不是也得补充上啊,这边直接拿过来,直接给它放一下就行啊这是一样的啊在那CTRLV啊那这个需求呢,咱们就写完了两种思路啊啊文档的思路这个要略好一些啊好,那我把视频录一下。
我来说两句