00:00
咱们现在模拟一下咱现在遇到的这个问题啊啊模拟一下现在问遇到的问题,比如说我这找打开一张这个,呃,打开一个这个文本文件啊,咱们写几个字段,就这呢,我有一个ID,这个ID就是什么,这个ID就是咱们的older detail的ID对吧?主件啊那后边呢,Older ID这是不是咱们商品项所属的这个,呃,O点订单呀,对吧?那现在呢,我们需要去呃计算什么呀,需要去计算一个什么玩意儿来着。分摊的金额对不对,那分摊假如假如咱们现在先有一个订单的,总的一个这个金额吧,总的一个优惠金额,那就是呃,我把那个粘一下啊,那个比较长的一个字段啊,咱们叫什么叫做呃,Benefit reduce amount对吧?啊来把它拿过来,注意啊,这个字段是什么。这个字段呢,是。这个订单的总的优惠对吧?总的优惠啊,那现在咱们看一下这个情况是什么样的啊,比如说我这个订单里边一共买了三个啊这个啊商品,三个商品,所以说older detail的ID是不是应该有三个呀,对不对,那外边它应该同属于同一个订单,那比如都是1001这个订单。
01:08
啊,那都是一样的啊,那我这CTRLC啊,CTRLV啊,CTRLV啊都属于这一个订单啊,那我这个分摊金额呢,啊,不是分摊,这还没有到分摊啊,这应该是这个订单的总的优惠对吧?总的优惠,总的优惠呢,我比如说是不是也是都是相同的呀,哎,咱们这儿呢,从这走走。都是相同的啊,都是相同的,咱们这比如说多少十块钱啊,十块钱啊,OK,那十块钱之后,咱们是不是按照那个比例,我们会计算出来什么啊,会计算出来啥玩意儿啊啊那个分摊金额对吧,那就把这个拿过来,CTRLC啊CTRLV。啊,这个benefit amount d啊呃,那假如说我们这个还是那样的啊,还是这三个商品项,他们的那个原始金额都是一样的,都是十块啊,都是十块,然后呢,整个订单总的优惠也是也是十块对吧?那所以说这个每人会分到多少优惠啊。
02:03
按照那个比例去算。都是3.33吧,啊,都是30,因为咱们总这个订单的总的优惠啊,是不是都是都是只有十块呀,然后他们仨的原始金额都是十块啊,那OK,那就是每人三块三。三块三毛33.33。啊来。Control c。Control,喂,好,那就是这样呗,这是现在咱们面临的一个一个处境,对吧,我缩小一点啊,面临的一个处境。OK,那现在大家想想吧啊,怎么去做这个误差的补偿,误差的补偿。其实现在很,其实咱们现在呃呃思路已经很明显了啊,就是我们需要从是不是这张表当中,我们任意找一行,是不是任意找一行去加上一个0.01就行,对吧,对不对,那怎么去做这个事啊。所以咱们得先得到0.01,先得到,得到之后呢,再去找一个去加上是吧,那怎么得到这个0.01啊。
03:07
大家都知道应该用这个字段去干什么,去去减去这个和,对不对啊,那这个字段怎么去减这个和呀,这咋减呀,这个。是不是这俩字段得在一行里边我才能减呀,对不对,是不是在同一行里边我俩字段才能相减,才能相比较,对不对,那你现在你相当于是这一行里边我一个字段要跟其他多行的一个和我去做比较,这咋咋实现呀,这个。咋实现呀?啊,我要用这一行里边的一个值去和。多行的一个和去做减法怎么去做,怎么实现。那我是不是直如果说能把这个和我放到这行里边来,他俩是不是就能减了。对不对,那怎么减。
04:00
怎么做?就是你怎么做呀,怎么做。是不是开窗啊?对不对,咱是不是可以开窗,开窗怎么办?开窗呢?我按谁分组,我按照订单分组。对不对,让对谁求和?对,他求和,那求和是不是这就会得到一个9.99,那这儿呢,是不是也得到一个9.99,这儿也到一个得也得到一个9.99,是不是它俩就能相减,就能得到一个误差了呀,对不对,哎是不是可以这样去做,那所以说咱们这儿呢,诶开个窗啊,那开窗的话呢,当然咱们这是sum姆求和啊,那肯定后边呢,你需要写这个a over,那求和求的是谁啊,求的是不是肯定是它呀啊求的肯定是他,那所以我这呢,我就写一个这个吧,CTR这这个字有长啊CTRLV分摊运费分摊优惠之和啊,分优惠之和啊那我问一下大家啊,你这个sum姆求和,那呃,求的和的字段呢,肯定是它,那O里边我们肯定要分区,分区肯定是按照订单分区对吧?那问一下大家order by要不要写?因为over里边咱们是part by order by对吧?Order要不要写?
05:12
嗯,用不用写,求和用不写。不用吧,因为求和不用分,不用排序对吧,那问一下写上排序对不对呢。写上排序没毛病是吧,有毛病啊有毛病啊,这个还真有毛病,为什么啊,因为这个order by呢啊,它是会影响到谁呀,开通范围啊,影响开通范围的,如果说咱们同样的场景啊,不加order by,那你这得到就是什么三个9.99,没错吧,9.99929929,如果你加了我点拜呢。啊,你假如说随便O这边一个东西啊,比如说O这个ID,那你得的叫什么呀。3.336.669.99啊,就是这个了,它就不一样了啊,因为order by有order by之后,那我的开征范围是什么?是当前分组内第一行到当前行啊,如果说不加order by,那就是第一行到最后一行能理解吧,那咱们这还不能加order by啊来,那所以说这边咱们不加order by的话,我得到的应该是三个9.99。
06:16
好,来。肯德。CTRLV啊CTRLV,那OK,那这样一来的话,那你现在得没得到这个误差得到了吧,是不是用这个减这个就是误差是不是,那关键现在咱们需要哎注意一个事儿,注意个什么事呢?那咱们误差到底补差在补偿在哪个上边。是不是现在我是不是每一个商品项都能获取到这个误差,对吧,每个商品项都能获取到误差,但是谁去补偿这个误差呢?是不是咱们得挑一个人来来来啊,得挑一个,那怎么挑啊。怎么调?怎么调?怎么挑啊?也就是说我们需要呢,将这个减去这个,然后再加在谁上面,加在它上面,哎,是不是这个任务就结束了呀?啊看着已经很接近了啊,怎么去做那这块呢,我们肯定是需要做一个子查询啊,你以它做一个子查询,做子查询呢,然后呢,你就去从里边选,选的时候呢,咱们做一个判断啊,什么样的,我给它加上0.01。
07:22
什么样的我不加。是不是就OK了呀,来咱们判断一下怎么判断呀。啊,怎么判断。啊,在这块呢,我想到了一个哎方法啊,这块我是这么去做的啊,我在这呢,我再开个窗啊,再开个窗,这个开窗我加什么呢?我加一个行号。加一个row number啊,RO nu row number,这个row number干什么呢?Row number我肯定是会按照一个字段去分,分组,按谁分组,按O分组,按谁排序呢?随便如如果是没有任没有逻辑要求的话,你随便按谁排序都可以,比如说我就按照这个ID排序。
08:05
Ipad序排完序之后呢,我会得到一个什么呀,会得到一个行号对吧,那这个就是啥?这个就是相当是一,那下边的CTRLC这个是多少啊,这个是二,这个呢是三。二等三对不对,那是不是每个订单里边的每个三品项都有什么123啊,或者是如果说这个订单里边只有一个三品项,那就有一个啥呀,就有一个一呗,对不对啊,那这样一来的话,那你说我可以以后就可以怎么做了,我以它作为查询。然后呢,从这里边选,选的时候呢,我做一个判断,如果说row number等于一。那我就在分摊金额上面加上那个误差。对不对,如果不等于一,不等于一是不是就不加了,那这样一来,咱是不是就选出来了一个商品项去承担这个误差了呀。对不对啊,是这样的啊,所以说这样呢,诶又加了一个row number啊,又加了一个开窗啊,那这样一来后续我以它作为大群,然后选的时候呢,我主法判断呗,啊number等于一我就接受误差,如不等于一,那我就哎不用加误差,就按照那个除法去算就行。
09:13
是这么算的啊,所以最终哎,咱们这个circle啊,这个思路就定下来了,这咱们这个思路啊,是这么个思路啊,其实这边这个难点主要就体现在这个这个误差上面,对吧?啊就是那个难点,来我把视频录一下啊。
我来说两句