00:00
好,那接下来我们说一下这个下边这个所谓的分组top n的事儿啊,呃,这个键表语句咱就不写了啊,假如说我们就是这几个字段呗,对吧,我要获取这几个字段啊,那这个怎么做呢?其实分组套分呢是在这,如果你用S去实现,是有固定的写法的啊,那基本就怎么做就行啊。咋做呀,基本上。开窗加外过滤。就能够实现分组套分的效果。当然开窗,开窗函数是谁呀?Rank啊rank啊,基本就是开窗rank加外置过滤,你就能实现分组套盆的效果。啊,那这就是一个固定的套路嘛,啊来咱们看一下这块怎么做啊,我们分析一下需求要求的是每个品牌下边这个销量排行前十的商品,对吧?啊,每个品牌下边啊,那最终的这个结果呢,我们看到这儿啊,对我们要求有四个字段啊,一个是统计日期,这个无所谓对吧?啊这无所谓,我们主要关注的是啥呀,后边仨字段啊,一个是品牌ID,一个是SQID,还有一个是他那个排名。
01:01
啊,当然这个你不要排名也行,这儿放谁呀,嗯,比如说那个放上一个,诶咱们这丢了一个字段,应该把谁也放上啊,是不是得把销量也得放上啊,对吧?呃,Payment amount啊当然这个嗯随便你只要加一个字段就OK了嘛,这个都是小事啊,都小事啊,那比如说就是这样的几个呃字段嘛,啊最终的结果什么样子呢?呃,就是比如说品牌A,我这儿呢有十个商品品牌B有十个商品品牌C也是不要是这样的一个效果呀,那所以大这大家这时可以怎么做呀,这个思路。别怎么做。哎,你想想啊,我们这样去实现行不行啊,来我首先我得先拿到当天,咱们算按当天算吧,先拿到当天的每一个SKU它的啥呀。它的销量。你是不是得先拿到这个基础数据啊,对,但是我们这儿要求的是什么,是每个品牌下边的前十对吧,所以说你得找到个SKU所属的品牌吧,哎,是不是拿到它,拿它之后你看咱怎么做啊,我们在这开窗加rank啊,开装的时候你是不是得写partition by,得写older by对不对,那咱这part提BY谁?
02:08
塔提申拜品牌按品牌分组,然后对谁排序呢?对销量排序啊,对销量排序,那这样一来你会得到一个什么样的结果?首先问一下啊,我们开窗之后,这个数据的行会不会变不会变,开窗只是对你这个原来的数据加一个什么呀。加一个列对吧,能理解吧,只是加一个列,那咱们这是不是加了一个排序的列呀,对吧,相当于啊,那这样一来我们会会得到,哎,每个品牌里边是不是都会从一开始排序对吧,一直排到最后,那每个品牌是不是都是这样的呀,那我们要求的是啥。前十前十,那所以说你排序的时候,咱怎么排啊,我们降序排序,降序排序,然后呢,你是会得到一个这样的数据集,我们要求的是每一个品牌的前十对不对,那所以说我们只需要加一个外过滤条件是不是就行,你的外过滤条件应该是啥。应该是rank小于等于十吧,对不对,让小电是不是把每一个品牌的前十就全部都过滤出来了呀,这不就是分组套分嘛啊,就这么去做固定套路啊好,那现在咱把这个circle呢简单实现一下吧,啊,那刚才说了,我们首先需要先拿到当天的s select啊,当天的每个品牌的销量的前十对不对,这个咱们直接拿呗,呃,不不是,不是每个品牌销量前十先拿到每个SKU的销量对吧?啊,每个SKU的销量我们刚才拿过了啊,在哪呢?在在这呢啊,我们在这儿呢。
03:36
看一下啊,那这个是不是就是咱们所需的每一个品牌的销量。这个没错吧,这个日期一会儿再放也行,咱们不着急。这是不是没错,拿到了,拿到之后呢,我们需要干啥呀,是不是得拿到这个每个SKU所属品牌,哎,那关键问题来了,怎么去拿这个品牌。怎么去拿呀?嗯,你涉及到这种问题啊,品牌是不是肯定是SKU的一个描述信息,对不对,那肯定得用谁商品维度表呗,没错吧,那肯定得用商品维度表,那所以说在接下来我们拿商品维度表,商品维度表我们是一个什么表来着,全量表对不对,你要拿它的话得怎么拿,得拿最新一天的分区吧,你不能拿全表,所以这呢,咱们需要写一个子查询,Like。
04:21
啊,然后from每张表DWD层的啊,D s ku in for的日期呢,当天2020。杠零六杠幺四啊,那这边咱们所需的字段是谁呢?这要谁来形容对吧?我们只需要俩,一个是SKUAD,还有一个是谁SKU,呃,不是SKN,是TMD或者TM name对吧?啊,我们可能最终要求的结果是不是t m name啊,那这边没有t m midd吧,他应该主见就是DD,就是它的SQID吧,好,是不是拿到了这个维度数据了,那他俩是不是得做一个joinone呢?对不对?那现在问一下大家,咱们这joinone的话,用什么join比较合适?
05:00
啊,用什么照,用什么照,你是不是得看你想要什么结果,对不对,你想要结果应该是这一部分还是这一部分。应该上面这部分对吧?啊,因为是因为是不是只有这些SKO,我今天才被支付了呀,那其他没有支付的,你统计它干啥是不是,那所以这块咱怎么做就行,Left就是或者用in run也行啊为啥?因为是不是它肯定是。这个小于等于下边这个集合的呀,对不对,那所以说你用哪种照都行啊,那这边比如left吧,那我们这儿要left draw的话呢,需要给它来个括号,给它放进去啊,CTRLV啊,然后这个往前推一下,呃,起别名我们就叫做呃叫T吧啊,就叫P1得了,呃,这个还还是换一个吧先名之一啊,这叫什么呀,叫做pay SKU啊,叫做销量嘛啊。啊,那这个叫做SQ in four啊,CTRLX啊来CTRLV。哎,我们tap一下啊,这个叫SKU in for没错吧,那他俩做draw啊,比如说left draw。
06:04
嗯,那这来之后呢,写一个连接条件应该是SKU pay。点什么呀,点SKUID吧。哎,等于SKU in four.ad没没错吧,装上了啊,装上之后呢,现在我们就可以从这里边去选择了SSE。啊,Select,然后是不是就from了,那问一下啊,我们现在select from的东西是不是他俩join之后的一个续表,没错吧,那他俩join之后续表应该是有几个字段呀。有几个字段呀。四个字段呗,他俩它俩是不是就四个字段对不对啊,肯定是四个字段啊,那也就是说咱们这儿呢,有SQID啊,有payment amount,有TMID对不对,还有一个ID对不对,当然这个ID和SKID其实相同的对吧?啊相同的啊,那也就是我们这儿呢,已经有咱们什么呀,SKID有了,那所属品牌有了,销量是不是也有了,那接下来是不是就可以按照我们刚才那个逻辑去做了呀,对不对,我们就要是不是选择呀,首先谁来什么。
07:08
谁like他?呃,我们得拿一个t m mid吧,这是不是得要啊,然后再要啥。SKID这没错吧?啊,那再来啥是不是payment amount呀,对不对,那还得拿啥,是不是还得拿一个RA呀,对不对,那rank是不是得加这个排序规则呀?呃,得得加这个开装函数啊,那后边我们T这个T排YBY谁是不BY那个t m midd啊,你注意看我这是不是没有写别名,没写别名行不行?可以啊,什么时候必须写命名啊啊,就是你俩子查询当中啊,假如有一个字段是同名的对不对,比如说SKID都叫SKD,那你那直接写个SKID,那他是不是懵了呀,我到底应该选谁的呀,不知道了,那你就得给他指明一下了,能理解吧,那你像这种就不用写啊TMID,然后后面呢,我们写一个o by我谁。啊,Payment amount,那当然这块呢,得DEA吧,我们得降序白居,因为我们要取的是前使好,那这个我们起个别名叫做哎2K对吧,叫2K,那完之后,那接下来咱是不是就可以以RK作为过滤条件。
08:14
对不对,然后去取咱们这个所谓的前十了吧,哎,那我问一下,现在我们下边在这个位置,我能不能直接用2K,能不能,那很很显然不能直接这就报错了对吧?啊这个为什么呀?因为是不是一先where先from在where,然后你才选择,所以说你这这个是不是where里边用不了啊,那真想用咋办啊。咋办呀啊,真想用的话,咱是不是嵌套一个子查询就可以用这个2K的别名了呀,对不对,那CTRLX啊嵌套一下呗,啊CTRLV,那这个往上推一下啊。我对一下,那这边我们起别名啊叫T t1吧,啊叫T1,那这时候呢,我们就可以s select。然后from from,咱们这个T1,当然这个Y过的条件呢,我们需要加一下啊,先是Y啥,RK小于等于十,前十是不是求出来了,那往上翻啊,那这里边我们需要呃,把这个我们所需的字段全部选上啊,第一个我们所需的应该是DTDT这呢直接写是不是就可以?哎,零六杠幺四没错吧,那下一个呢,是t m idt midd直接选呗,咱们有t m midd SKU ID,那直接选呗啊那pay payment amount,那选出来呗。啊那再来一个呢,2K对吧?呃,那就是2K呗。
09:34
啊啊,那到这一步呢,我们这个需求就做完了啊,这就是咱们这个销量排行前十的这个写法固定套路啊,就是分组加上谁呀,加上RA,然后加过管理条件,呃,检查一下这个语法是否正确啊啊这个再转圈,转圈的话呢,说明语法至少是那个没有问题的啊。啊,咱们稍微等一下这个结果吧。嗯,咱们这儿可能这个效效果可能不太好,为啥?因为咱们没有,是不是没有那么多的这个这个数据量啊,没有那么数据量啊,我们可能求的是前十,但可能这个每个品牌也就有一两个可能啊,也可能有这种效果,因为咱们没有不够十个嘛啊。
10:14
稍微等会儿吧,看一下这个效果啥样的。呃,这边还在这个计算啊。啊,应该是计算完毕了,好,我们来看一下啊,那这边呢,就是咱们那个所要所所所所所统一那个日期对吧,这个无所谓,那你看后边啊,这相当于品牌一,品牌一我是不是有呃,有这三个呀,只有咱们可能没有这么多商品啊,那品牌二呢啊,这个品牌三啊,这品牌四能看到吧,啊就是这个效果,那后边的有它的这个排序嘛,123123啊一一哎就是这样的啊好了,那这个需求我们就哎完成了啊,就完成了啊啊以后再有类似的这什么分组top n,大家一定得想到怎么去做啊好,那视频我录一下。嗯。
我来说两句