00:00
嗯,好了各位,那现在呢,我们来看一下下边这个需求,叫做各分类商品购物车存量TOP10,呃,这是一个非常典型的分组top n对吧?分组top n的问题我们已经做过好几个了,那是不是有固定的套路啊,对吧?那通常就是怎么做来着,这种分组套是不是就直接来一个啥就行,来一个RA开窗对不对?那开窗完之后呢,是不是再进行VR过滤啊对吧?哎,其实就这么一个固定套路,好,那你要想用rank开窗对不对?那你是不是得后边得写一个啥,得写一个over吧,Over里边是不是得有part by,得有order by啊对吧?好,那问一下大家,你说对于一个分组top n的问题,对吧?那我那个run后边,哎,Partan by我应该怎么决定,对吧?那我older by我又应该怎么决定呢?又应该怎么决定对吧?先说part其麦这个通常以谁为准就行了呀,就根据需求确定就行对吧?分组套N是不是首先得有一个分组对不对?那他这个分组是谁?那我part提人拜,我是不是就按谁牌人卖就完事了对不对?那咱这儿是按谁分组啊,相当于咱们要求的是各分类下边的这个商品购物车存量TOP10对吧?那所以说那我们partn buy是不是就得按照商品所属的分类信息进行一个哎这个分组啊对吧?哎,Part buy好,那older。
01:17
O,其实也简单,OK,你TOP10 top10是不是就是前十啊对吧?你取前几是不是肯定得有一个东西,你按照谁去取前几啊对吧?OK,那咱们这是按照谁去取取钱解啊,是按照所谓的购物车存量去取钱十的对吧?那所以说order buy,那我是不是肯定是按照这个存量进行orderby啊对吧?诶是这样的,所以说那咱们得知道就是我part by这个由什么决定,我order有什么决定?好了,那现在呢,我们继续往下进行,也就是说我要想实现咱们当前这个需求,我首先得先拿到什么啊,咱首先得先拿到每个商品的分类信息,你还得拿到每个商品的是不是这个购物车存量的值才行啊对吧,你不拿到这些东西,你这个rank开窗函数是不是都没法都没办法写呀,对不对,因为你写rank我我是不是part,我得按照商品的分类信息进行part对吧,那我order,我得按照这个存量是不进行order对吧?那所以说你要想用,那就得先把商品的这俩信息。
02:18
给拿到才行,好那咱们现在一个一个拿,先拿一下这个购物车存量吧,好,那商品的购物车存量咱这怎么去获取,其实咱前面就提到过,对吧?所谓的存量型指标我们应该去找那种是不是周期快照时表啊,对吧?好,那现在咱们有没有跟购物车相关的周期快照表呢?显然是有的,哪张表咱去找一下啊,应该是DWD层的一张表对吧?应该是交易域的car负这张表对吧?这就是一个购物车这种就是每日全量快照表,好,那大家还记不记得这张表的表结构还记得吗?还记得吗?这张表每行数据指代的是什么,大家还记得?哎,很简单,每行数据指代的应该是一个用户的购物车当中的一个SKU的件数吧,没问题吧,好,那我们现在要求的是什么来着,是每个SKU的所谓的购物车存量,什么叫做购物车存量来着?就是你把对吧,所有人的这个购物车当中这个商品的件数给它加一起,咱是不是能得到这个商品的购物车存量,对不对?所以说我们是不是就可以根据这张表的数据进行一个统计啊,对吧?那咱们统计的逻辑应该是什么样的?
03:29
直接怎么样,直接找到这张表的数据,然后按谁分组,我就按照SKU分组,对不对,那你会把什么样的数据分到一组,就是你会把就是购物车里边有这个商品的记录是不是分到一组啊对吧?好,分到一组之后怎么办?是不是直接对诶这个SQ number求个和,那咱们得到的就是这个所谓的SQ的购物车存量对吧?所以说这个其实很好求来那现在我们把这个去实现一下啊来,我在这儿来一个数据装载,那之后我们来一个select啊,然后呢,我们from from哪张表DWD层的啊,应该是交易域的cart负这张表,好,那我们在这拿它几个分区,是不是只拿一个分区就行对吧?2020杠零六杠幺四,因为它是一个每日全量快照表对吧?好,那完事之后我们继续往下进行,接下来怎么办?是不是按照我们刚才的规划,我们直接按照这个所谓的Su是不是进行分组就行了,对不对,按照分组完之后呢,我们上面还得求一个啥,求一个SKU的ID,先拿出来求一个什么,求一个和就行。
04:29
对吧?那把谁拿过来呢?是不是就把刚才那个number拿过来就行对吧?那这样一来我们就能得到每个SKU的购物车存量,那现在我们得的就是啥呢?诶,三号商品对吧?在所有人的购物车当中一共有40件对吧?五号商品在所有人的购物车里边呢?一共有80件对吧?那等等等等,这就是所谓的购物车存量,好那完了之后我们一会会用到这个字段,所以在这儿呢,咱们给它起个别名叫做card number好了,那购物车存量咱们已经拿到了,好,那我们还需要拿到什么来着?我们刚才说了,我们要想去rank开,用那个rank开窗对吧?我们一个是需要拿到商品的分类信息,一个是存量信息,对吧?存量已经拿到了,下边是不是就拿了一个分类信息,分类信息咱去哪拿呀。
05:13
分类型是不是就应该从纬度表里边呢?对不对,那所以在这呢,我们直接塞that一下,然后呢,辅让那张表应该是DW,呃,DM层的对吧?DM层然后呢,找到SKU,这注意观察,你一看到这个表名就应该能反应过来这是一个哪种类型的维度表,每日全量快照维度表对吧?那我要拿是不是应该只拿一个分区就完事了对吧?3.2V2DT等于2020杠零六杠幺四啊好,那完了之后我们拿一下咱所需的这些属性啊,咱们都需要什么属性啊呃,Squ的内幕咱们需要,还有这三级分类的信息,咱是不是也需要啊对吧?那所以在这儿呢,咱们快速的去给他拿一下啊哎,这边我CTRLC我快速的处理一下啊呃,这边CTRLV来,咱们还是用之前那种方法处理一下啊,把这个标号去掉,然后呢,来一个呃标号,然后点星啊,然后呢全部删除,换成逗号CTRLCTRLC拿过来,诶,然后呢,我们给它放在这个位置,诶好了,那现在这些分类信息咱就拿到了,但是没拿全啊,我们还得拿一个啥,还得拿一个SKU。
06:14
是不是内幕啊对吧?好,那光拿这个也不行,咱还得拿个啥,还得拿一个ID吧,对吧?咱是不是得用这个ID去跟上面的SKD得关联一下对吧?好,那现在我们呃,所需要的信息咱们就都拿到了,诶包括每个商品的诶存量对吧?也购物车存量拿到了,还有每个商品的这些属性息咱们也都拿到了,都拿到之后,咱们接下来就可以对它来进行一个join操作了啊好,那现在我们给它join一下,那既然要join是不是就得给它起别名啊对吧?来回车啊走这边往前推一下,呃,咱们就管它叫做cart吧,对吧,叫cart,那下边这个咱就叫SKU啊来回车好,那这边咱也是给它往前推一下啊呃,这个我给它起个别名叫做SKU,那他俩应该得做一个join操作,在这呢,我们就用left draw就行,Join好,那join完之后呢,我们这来一个on,应该是on什么on是不是cart.skuid等于SKu.ID啊对吧?好,那现在已经照唤上了,照唤之后我们就可。
07:14
可以从里边选择咱们所需的每个字段了,来select from,好,那现在我们应该怎么处理?现在怎么办?是不是应该首先先把所有的字段选出来,然后加rank,然后再过滤啊对吧?应该是这样的一个逻辑啊好,那所有的字段呢,咱们都给它选一下,就在这啊,CTRLZ我拿过来,CTRLV,咱快速的处理一下,走走,嗯,走删多了啊CTRF,然后呢,把这些全部换成逗号来,CTRLLCTRLC咱给他选一下,呃,选完之后我们放在这个位置啊,来走,你来这边咱给他往前推一下,哎,当然这里边有些东西咱们目前可能是拿不到的,比如说谁呢?这个地T地T,这个咱们最后是不是给他补上一个产量值就行,对吧?所以这个咱们先不管它,呃,然后这些信息咱当前是都已经拿到了,对吧?好,接下来我们继续往下走,下边咱得加个啥,是不是得加上一个RK啊对吧?那在这我们就可以用NK了R对不对?刚才我们已经拿到了我们分组所需要的这个分类信息,对吧?咱们说了这个分类在这儿了,我们也不去区分是一还是二还是三了,咱们都给他拿过来就行了,对吧?那在这儿我们是不是只拿A就。
08:20
对吧?哎,那再拿一个C2ID,再拿一个C呃三的这样的一个IDOK,那就完事了对不对?那塔列麦搞定了,那后边我们要选的是啥?应该是欧德BY对吧?Order by谁来着?是应该by cart number啊对吧?这就是咱们那个存量啊,哎,然后要注意我们这个存量我们在排序的时候是按照升序排还是应该按照降序排呢?应该是降序,因为我们要求的是前几对吧?OK,那前几我们通常怎么过滤,是不是应该是那个RK小于等于几啊对吧?所以说咱必须得保证,就是你排在前几的得位于前面才行对吧?那所以应该是降序排序啊,所以在这呢,我们应该是来一个DEC,那就完事了,好,那后边咱们起一个别名叫做RK就行了啊,行了,那截止到现在,我们就已经把这个排序加上了,加上之后咱们来看一下当前的这个数据长什么样啊,来回车看一下当前的结果是什么样的啊,来咱们看啊,首先各位同学看这这个是不是应该是属于同一个分类的不同的SKU对不对,然后你看后边它有什么,是不是有。
09:21
一个排名1234啊对吧?呃,看咱们这儿要求套个十的话,根本看不出来效果,我这个分类下边是不是一共就四个商品啊对吧,咱还没过滤呢啊好,那玩往下看看这这个应该是也属于同一个分类,那这些是不是分类信息都是一模一样的呀,对吧?好,那你往后看它这是不是也是有多个这个SK啊对吧?然后后边也有相应的排名,哎12345678,然后你注意观察这儿,这儿出现了四个八,这是什么意思呢?并列第八对吧,那玩了我们这用的是RK对吧?RK啊也就用的是rank rank是怎么样来着,是稀疏的排名对吧?所以接下来直接就到几了,直接就到12了对吧?这个应该是能够看出来效果的啊行了,那这个排名咱们就都做好了,做好之后我们现在只剩下最后一步,那就是干啥呀,是不是就是过滤啊对吧?诶我看有些同学啊,他直接就怎么做了啊,直接就是在这儿我来了一个Y2过滤条件啊,应该写写写where啊W1RE,对不对?呃,这个分号碍事了啊,拿过来直接在这就写了RK,比如说小于等于三,你说这能行吗?这肯定不行啊对吧,为啥呀,你想啊,你这个WHERE2跟select肯定是谁先谁后,肯定是先过滤在select对不对?没问题吧,OK,好,那所以说呢,你select上面的别名在当前这个紫群下边,你是不能用的啊,那所说你得怎么办呢?得嵌套一个子查询,是不是才能用到过滤啊,对吧,这个一定要注意一下啊好,那现在咱们CTRLX拿过来,诶,我给它放在一个括号里边,哎之后CT。
10:48
CTRLV这个粘错了啊呃,CTRLV没问题,好,那现在呢,我们再把这个呢给它往前给它推把啊在这儿呢,我们起一个别名就叫做诶,T t1就行啊来我们再来一个select from t1 select之后呢,From,诶然后往下走找到这个T1,那T1完之后呢,我们这儿是不是得写一个VR过滤条件了,这回对吧,这回咱们就可以用RK小于等于三哎,去拿那个TOP3了,对不对,那上面呢,咱是不是就可以选择我们所需要的每一个字段了呀,对吧?行来星我这块就不再去列举每个字段了,咱们直接回车看一下效果。
11:23
来大家看这个结果是不是就已经出来了,你看是不是这个分类下边我会有排名前三的商品,对吧,当然我们这儿呢,有两个并列的第二啊好,然后往下走,这个是不是也是123123123呀,对吧,那这个效果就出来了啊,当然这个可能这个是不是只出来了一个啥呀,这个只出来了一个。一二是吧,这这个为啥只出来一个,对,因为这个分类下边咱们只有两个商品对吧,TOP3它就满足不了啊啊这个大家应该是能看懂的,行了,那这个完事之后,呃,这个需求咱也就做完了,行,完成之后视频我停一下啊。
我来说两句