00:00
好,那支付信息统计,我们看他统计了哪些值啊,哪些字段来看一下这个。诶,往下走,CTRLC。然后放到这个位置,放在这个界面语句上啊,CTRLV,好,我们来看一下啊。诶,这边这个建表语句也有有点小毛病啊。键面语句有点小毛病。他这个注释是没错的,注释没,我这个还真没发现注释没错的啊,这个单日日支付笔顺,单日支付金额对不对?但前面这个字段名写的有点毛病,它叫什么?叫older count OC mount,这应该叫什么呀?应该叫payment才对啊,这边我还真真没注意到啊,来给他改一下啊,应该叫做pay ment,叫做payment count和payment amount才对啊。呃,那可能大家自己写circle的时候呢,可能也被这个字段名给误导了啊。可能被他误导了,但这边应该是前面有一个笔误,但应该是支付的次数和支付的金额才对啊,那下边呢,有什么有单日的支付人数,你看这个字段跟我们上面那个订单的那个字段是不是都一致的呀,对吧?那订单你会求,那这个支付是不是也会求了呀,是一样的道理呀,好,那下边还有一个什么啊。
01:12
下边还有什么啊,金额也不是啊,对这个金额呢,应该是DEC类型的啊de DEC类型,那这边呢,我们给他来一个十,呃,来一个这个来一个二,OK啊这个也是笔误,行,那咱们现在继续往下走啊,继续往下走。呃,看一下这个同学啊,这个同学的这个问题,当一个用户当日下单好几笔用户,呃,这个用户数算一还是笔数用户数算一啊用数算一就是这个什么叫下单用户数,只要今天下过单,那OK,我就记一个一。对不对,只要下过单我就记一个一,也就说你甭管下几次,你都是一个下单用户啊,你不是多个用户对吧,所以说还是记一的啊,不是笔数,不是笔数。
02:00
好,那现在咱们继续呃,往下看啊,就往下看,呃,那接下来咱们看下边的这个这三个字段也说完了,跟刚刚才求法是一样的,那下边呢,有一个呃,单日支付商品数。当日支付商品时,那这个当日支付商品数,咱们前面分析过了,他跟哪个概念其实比较相似的呀,其实跟这个当日支付人数是比较相似的。对不对,那只要我这个人今天支付过,那OK,我就算一个这个支付人数对不对,那这个商品这边也是同样的道理,只要我某一个商品今天支付,今天被支付过,今天被支付过,那OK,我就算一个,诶当日支付商品数是这样,而不是说这个这个字段啊,统计的不是什么,不是咱们这一天一共卖了多少件商品,统计的不是这个东西。不是这个东西啊,好了,那这个昨天已经解释过了,咱们现在意识到这个字段它到底是什么就可以了,好,那这个咱们就完事了啊,那接下来我们看下边,下边还有一个这个下单到支付的平均时长,那这个这个值我们只能去哪了,我们只能去DWD去拿了,只能去DWD拿了啊这个大家要注意到,只能去那拿了,OK,那这边咱们就呃差不多就说完了,那说完之后呢,我们呃,接下来呢,去分析分析啊,咱们这里边的这几个字段都应该从哪张表里边去取出。
03:21
这一次呢,呃,可能啊,我这些字段不能从一个表里出了,可能需要去从多多张表里出,那出完之后得照到一起,对吧,那我们先来看看这个前三个,前三个字段呢,这个很容易,还是去从咱们刚才那个用户的,呃,填表里边去拿就行了,呃,用户的行为填表去拿就行了,那下边呢,是这个单日支付商品税。那这个要去哪拿呀,这去哪拿,这个是不是应该得去从这个商品的这个填表里边去拿了呀,得去商品行为填表里去拿了。对不对,因为你要去统计这个商品啊,哎,今天这个这个呃,就是说哪些商品今天被被支付了,哪些商品被支付了,所以说呢,你需要去填表里边去拿它,这是这是这个字段,那接下来这个字段呢,刚才咱们也分析过了,得去哪拿呀,他是不是得去咱们DWD层去拿呀,得去DWD层去拿。
04:17
OK,那咱们分析完之后呢,我们这几个字段逐一攻破,一个一个一个一个这个都求出来之后,再给它往往一起转就行了啊,那咱们先拿前面这三个比较简单的啊,好,刚才已经分析过了,我应该去从d ws user action对抗日期呢还是今天。零三杠幺零,好,那上边呢,选的这个方式呢,跟前面一模一样,基本上啊,那首先我们这边因为这个这仨字段哎,需要跟下面这个字段,还有这个字段是每个字每每个都是一个子查询啊对吧,需要join join的时候得有一个连接条件,那咱们还是用日期作为连接条件啊,所以这边呢,咱们补一个日期2020杠零三,然后杠这个幺零,嗯,OK,嗯,那现在呢,我们呃把这个完事之后呢,咱们往往下看啊,这边我取一个DT,然后再往下,下边咱们去统计这个当日的支付笔数,那直接sum呗,Sum,然后呢,有一个字段叫做payment count,这咱就不再去看了啊,那再往下呢,有一个sum,然后来来括号来什么呀,来一个pay,呃,Payment amount payment amount啊,那再往下,呃,这个当日的支付人数,支付人数是不是还是那个some啊,对不。
05:32
哎,一样的啊,那么一如果说呃,这个payment count大于零,大于零我就记个一,否则我就记个零,这就是支付人数,那咱就拿到了啊,咱就拿到了,那一会儿我们需要招,招完之后需要去选择对不对,所以说这块呢,咱们都需要给它起一个呃别名,咱们都起个别名啊好,那咱们现在来一空格,空格之后呢,我们来一个这个,呃来什么东西,来一个这个别名payment count。
06:02
下边payment amount。然后再往后呢,有一个这个支付的人数,Pay payment user,诶这个count支付人数,那这个字段呢,这三个字段咱们就呃这个顺利的拿到了,拿之后呢,我们去拿一下这个当日支付商品数,那这个咱们要去哪拿呀,这个应该去,诶我去拿一下啊DWS,然后来s ku这个action对抗的,我们应该从这张表里边去拿商品的填表里啊,这个刚才已经说过了啊。CTRLCF3钉在这个位置,那现在咱们回到刚才的这个位置来。好,我们现在拿一下这个当日这个支付的商品数,支付商品数怎么去统计呢?还是根据他这个被支付次数去统计,是不是就可以,这有一个被支付次数,如果说被支付次数大于零,那这个商品是不是就相当于是诶算作一个诶这个支付商品数啊,对吧?那否则我就记零还是sum if这个操作啊好,那我们。
07:03
给他拿过来,Select from d ws SKU action de count,然后下边呢,咱们日期呢,得是今天才行啊,二零。2020杠零三,然后杠幺零,好,那接下来呢,呃,咱们把这个那个就是下货单的这个这个商品呢,咱们的个数统计一下啊,那是不是就得是sum if sum if,如果说呃,我的payment count诶大于零,那我就说明这个商品它被支付了,对吧,我就记个一,否则就记个零,诶还是这个操作啊好,那上边呢,选一个日期,2020杠零三杠幺零。那来一个DT,这个DT呢,就是纯粹是为了这个跟其他的子查询进行join啊好了,那这个字段呢,咱们也已经拿到了,也已经拿到了啊OK,那在拿完之后,那接下来我们要去统计什么了,接下来要统计什么了啊那接下来呢,我们要去统计一下最后一个字段了,最后一个呢,可能相对来说呢,就呃有点这个绕了啊看一下它。
08:07
这个统计的是诶,下单到支付的平均时长,下单到支付的平均时长啊,那这边咱应该去哪张表里拿呢?应该得去从咱们DWD层的这个。引得去这个累积型快照试表里边去拿了,为什么要去这拿啊,因为只有这个地方,我是不是才有这个订单的支付,以及他的下单时间啊,对不对,那这个这有一个创建时间,创建时间呢,它就是这个所谓的一个下单时间,那支付时间呢,就是他支付的时间呗,对吧,只有从这能拿到。那OK,那接下来呢,咱们把这个订单呢,去给他拿一下,去拿一下啊,那我们统计的是什么?我们统计的仍然是这个一天里边的这个下单到支付的这个平均时间,一天里边下单到支付的平均时间,所以说我们拿这个订单的时候,就是拿这个数据的时候,咱们应该怎么去拿呀,是不是只拿这个最新一天的分区的数据就够了呀,只拿最新一天数据的分区就够了,那OK,那咱这个表是按照什么分区的,他是不按照这个订单的创建时间去分区的呀,对吧?那也就是说我们只拿今天的这个新创建的订单就可以了,前面的咱就不管了,咱们统计当天的只统计当天,而且咱们统计的只是一个平均值,所以说呃,可能这里边呢,会涉及到一些这种就是订单,呃,下单和支付这种跨天的这个订单,但其实这样订单其实很少的,其很少的啊,那所以说这边呃,咱们就给它忽略掉了,就不考虑这部分跨天的了,呃,当然你要非要考虑的话也行,你把这个怎么办?你把这个当天前一天的这个。
09:45
呃,订单是不是也给他查出来诶,然后就可以了呀,对不对,因为我跨天我只需要查两天就够了,呃,这个咱们通常也就不用考虑它了,因为这个毕竟跨天的是很少的,而且我这求的只是一个平均值,对不对,只是一个平均值啊好,那现在咱们把这个表给它盯出来啊,盯出来之后呢,拿一下我们所需要的数据。
10:04
CTRLC f3。来,我们回到最底下啊。好,再来一个子查询,那select from from哪呢?From这个DWD,然后呢,Fact order INF for这张表,那日期呢,得是今天DT等于2020杠零三杠幺零拿来之后呢,呃,首先还是选一个日期,我们因为需要去join嘛,那三元零,然后DT下边接下来就是我们要求的那个所谓的一个这个呃,平均值了,所一个平均值了,那这边咱们应该怎么去统计它,应该怎么去统计它,大家得想想我们这儿要统计是什么,我们要统计的是下单到支付的这个时间的一个这个平均值,对不对,一个时间的平均值,那OK,你那你你想一想,你过滤出来的这个订单,它必须得是什么样的,必须得是是不是记下,记得是什么样的,得是这个下完单之后得是什么呀,得是已支付的。
11:02
对不对,也就是你支付时间它不能为空,我是不是才能去统计这个东西啊,那你要是都没有支付呢,那那你这边怎么去统计呢?诶没有支付的咱们就不考虑它了,因为有可能出现这种跨天的这种嘛,对吧,也还有可能会出现什么样呢?就是它根本就不支付了,对那这样的我们是不考虑的,那所以说where过滤条件呢,还得怎么的,还得再加一条where,什么where,这个pay ment payment,这个time is not不能为空。那这样的东西我是不要的,不能为空,好那也就是咱们现在过滤出来的这个数据当中啊,是不是肯定是诶订单时间和诶支付时间是不是都有的了呀,那都有了,我接下来就可以放心的去进行这个呃计算了,就可以放心进行计算了啊那计算的时候咱们怎么去计算呢?诶这么去算就行,来来一个呃,我们得我们前面讲过啊,咱们呃这边要要获取的是一个什么值,获取的是一个分钟数,对不对,那分钟数我们直接用俩时间去解,你得不到这个分钟数的,我们需要用什么呀?需要用这个unix time step将一个时间转成以秒为单位的时间,然后呢,相减得到的是那个相差的一个秒数,秒数完之后呢,还得干什么,还得出一个这个60。
12:13
呃,然后得到这个所谓的一个分钟数,这是咱们这边计算的一个方,一个公式,啊好了,那现在咱们开始去计算,那这边首先来一个UN unix six time sta,那接下来把谁扔进来啊,是不是先得把这个payment time扔进来,把它扔进来,然后还得把谁扔进来,再减一个unx unx time step,再把a c create time扔进来。那这样一来就得到了一个他们俩的这样的一个,呃,一个差值,一个差值,当然我们这统计的什么,统计的是平均值。那所以说你得把所有订单的这个差值。是不是得先求和,求和完之后呢,再除以那个count星对不对,然后再除以一个60,这是咱这边这个整个的一个计算公式啊,那CTRLX呗,咱给它放在一个sum里边啊。
13:05
CTRLX,然后呢,来一个sum函数。那接下来呢,CTRLV,诶把它扔在那,扔那之后呢,呃,我们需要让它去除以一个这个个数,那个数是不是就是count星就行count星,那OK,最后呢,还得再除以一个诶60,因为我们要转成以秒为单位的这个值啊诶那这个呢,咱们就诶完事了就完事了,那都完事之后呢,那这三个值我们应该是什么关系啊,是不是应该就是join join完之后呢,我选这个每一个这个计算结果是不是就行了呀,那这个join这块呢,咱们就不再自己写了啊这个咱们节省时间,我把文档这个S呢给大家粘出来来。那就在这个位置。来到这CTRLC。呃,那这边咱们就把这个给它覆盖掉吧,覆盖掉吧,因为这个剩下的工作就是一个join了,没有必要再手敲了CTRL位好,那这边就是呃,咱们就统计的这个支付信息,统计支付信息啊,那这个需求虽然做起来呢,呃不是那么难,但是这里边他给大家透透露出来了一个信息,什么信息呢?就是说我以后可能大家在实际开发过程当中啊,也很有可能面临这样的情况,就是说你这个来了一个需求啊,呃,我呃可能这里边所有的字段啊,我不能出自于同一张表。
14:21
对不对,而且还有可能出自于什么呀,还有还有可能出自于根本就不是一层,对不对,那咱们这儿是不是既有DWS也有这个DW,也有DWD啊对不对,那这种情况其实是诶呃,大家可能会遇到的,可能会遇到的啊,所以就是大家要知道有这样的一个这个这样的一个情况,就说不是说诶咱们所有的需求你都能从什么DWT出,或者都能从DWS出,这不一定就是说你得去分析,诶如果咱们怎么分析呢?还是老还是那那个套路啊,先从DWT看看他能不能,他能就从这出,不能DWS实在不行,DWDDWD呢,肯定是能出的,因为这是我们最明细的数据,最明细的数据啊好,那这边这个需求咱们就完事了啊,我把视频录一下。
我来说两句