00:00
好,那咱们接着走啊,嗯。上午我们把这个思路已经这个大致分析的差不多了啊,那我们,呃,就是想解决刚才咱们那个误差的问题啊,咱们需要开俩窗啊,开俩窗一个是开窗求和,一个是开窗加行号对吧?啊,那接下来咱们把这个思路呢,给落实一下啊,给落实一下来打开之前咱们写那个circle啊呃,咱们这要要求分摊的话,我们需要求三个分摊对不对?分摊最终金额分摊运费分摊优惠。他们仨其实你写起来都是一样的逻辑啊,所以我们这儿呢,就只以一个为例啊,咱们以一个为例啊,来我们开始。呃,现在呢,我们已经按照那个除法的方式,是不是已经求出来了一个这个分摊金额了呀,对吧,但是这个呢,可能是有问题的,那咱们需要去哎搞这个误差,呃,那这个误差呢,咱们怎么做来我们逗号啊。这个误差咱们要求的话呢,我们按照之前的规划,咱们需要去去去拿两个字段,一个字段呢,是这个订单当中的优惠金额,一个是分摊之后的优惠金额之和,对吧?啊,那现在咱们就把这俩字段的先给它求出来。
01:08
啊,来订单的优惠金额很好拿,直接OA里边去拿就行,对吧,拿那个benefit reduce amount,嗯,这个搞定啊,再加一个这个,呃,注释吧,这个相当于是我们的诶订单。不结婚呢?这也罢工啊,哎。订单,然后呢,这个是呃,优惠金额。订单优惠金额啊,OK,那就咱接着往下走啊,那他搞定之后,咱们搞下一个,下一个是不是得开窗去求咱们分摊优惠之和了呀,分摊优惠之和啊,那所以这呢需要去求一个sum啊,那萨咱们求谁萨求是A。咱们要求的是不是应该是这个。
02:00
它是不是就是一个分摊优惠金额呀,对不对,那求和求对就是它,那咱们把它直接CTRLC拿过来就可以啊,可以拿过来的,诶放这里啊,那后边呢,咱们得写over啊over over里边呢,咱们是不是得写一个这个括号二里边得写分居part by by谁。By order ID对吧?Order ID啊,那需要呃,这个order by吗?不需要order y啊,求和不要加order y啊,那这个咱们求出来的就是分摊优惠之和啊,那所以咱们后边加一个下那个复坠加一个sum好好,那这个啊就搞定了啊,这就搞定了啊完了之后呢,咱们为了去呃,后边咱是不是得把这个误差咱们得补上到一个里边啊,所以咱们为了诶方便去找那一个,那咱们加一个road number是不是哎比较方便呀,那加一个road number,所以再开一个窗啊来咱们推车。再改装的话呢,这回roll number啊,后边的我们over over里边也是part part by by还是order ID吧,那这回得写order by了,对吧?那这个OY咱写谁呀?
03:12
其auto这呢,你可以看你有没有什么具体的这个呃,业务要求啊,因为有些情况下,可能我要求什么呀,我要求你把这个误差补偿在谁呀,补偿在我这个原始金额最多的这个商品项上。那这会你是不是就可以按照那个原始金额来去进行原始金额分摊去进行排序,对不对,那咱这没有没有什么逻辑啊,那我所以说我随便我找一个字段就行,比如找找谁呀,就是咱们那个哎,Ad就行啊,找od.ad就可以啊,就这个哎按它去排序就可以啊OK,那这个排完序之后呢,我们给它起一个改别名叫做RN啊RN,哎,这是咱们那个行号啊,那咱是不是已经相当于得到我们刚才在这上面给大家写的这个结果了呀,这是不是就是我们当前这个结果啊,这是我们的结果,咱们就长这样啊,就成这样啊啊那这时候我们就可以再以它作为一个子查询啊,然后呢,去补偿这个误差了啊来咱们CTRLX啊c select,然后呢,From,因为它是一个子查询嘛,所以说我们需要给它放在一个括号里边啊括号。
04:19
来把这个推一下,然后呢,把它CTRLV放在这里,放这里时候呢,咱们把这个circle呢往下推一下啊,这个保证它这个层级关系,这个方便我们查找问题啊,咱的from,那from查询是必须得起别名啊,咱们起个别名啊,这个叫什么别名啊,随便起一个叫tmp吧啊这个无所谓啊好,那这个时候我们就可以开始选了啊,开始选了啊,那这回选其实就是咱们要选我们的最终结果了啊,其实是不是就这些东西啊,一个一个选,那上面这些东西咱们已经是这这些是不是已经都求过了呀,对吧,求过之后呢,我们放在这里啊放这啊这个能直接拿吗?这个。这能直接拿吗?这能不能直接呢?
05:01
嗯,能吗?啊,其实最好别真拿了啊,因为这个OD这个是哪,是不是这里边的这个别名了呀,因为这个咱们这是不是有又又嵌套了一层啊,这其实就是tmp就行了,当然tmp咱们是不是就没必要写了呀,啊咱们写一个就行啊,咱们这样呢可以往下点。啊,摁着这个out shift,那你可以往下点,往下拉应该也行,诶往下拉不是这个快捷啊,关键是可是out往下拉是吧?呃,行吧,咱先点吧,诶这个没用的,咱们给它去掉就行了啊好,那这就是我们在这儿呢,呃,选的这几个就是不用计算的字段啊到这儿了啊那SID之后该谁了?So,该这个呃,Regional amount了对吧?那他比较简单,他直接拿是不就行啊,就是它原始金额分摊嘛啊直接拿。来,CTRL。喂,诶拿到拿到之后呢,接着往下走,诶接着往下走啊,那接着往下走该谁呢?我看一下,呃,就咱们当时这个优惠金额,这个分摊呢,好几个,咱们只不是只算这个分摊优惠了,对吧?咱们直接选它就行啊,别的一会儿咱们就看一下就行啊,那这个怎么写呀,是不是得做判断了,咱也得做判断了,判断什么,如果说row number等于一。
06:12
那我这个分摊的优惠应该是多少,应该是你刚才求的那个,按按除法求的那个,然后加上哎,它减它是不是就可以了,否则的话呢。否则的话是不是就等于它对吧?啊,那就是这么一个逻辑,那这个咱们要判断我们还有当中咱们用什么语法呀。是不是根据一个波尔条件啊,去做一个判断,判断完之后呢,去决定最终的值是多少,这个应该用什么语法呀。啊,有的会会想到应该有case对吧?啊还有什么呀。还有if啊,啊,刚才下课的时候同学跟我跟我说if没学过是吧?啊给大家说一下啊,Kiss when是干什么用的?Kiss s when跟if其实很像啊,只不过if呢,我只能有什么,只能有这个是或者是否对吧,也就说你的结果只能是两种情况,那case问呢,相当于什么呀?相当于咱们呃加va当中那个Switch对不对,Switch case对吧?啊,你可以有多个选择啊多个选项,那咱们这需要用case when吗?
07:08
不需要咱是不是就是是否等于一,等于一我就怎么怎么样,不等于一我就怎么怎么样,对吧,所以说咱们这if就可以了啊,那if这个函数怎么用啊,If这个函数呢?呃,我们可以提示一下啊,你就CTRLPCTRLP它会提示的啊。呃,首先你需要传三个参数,第一个是布尔类型的,第二一个呢是任意类型,第三也是任意类型的,也是任意类型的啊,然后大家要注意了啊,这个其实就相当于咱们加工当中那个三元运算符啊,三步运算符啊,如果等于处,那我就返回这个值。如等于false,我就返回,哎,这个值就是这么去用吧,啊,那现在咱们来先写这个负尔条件啊,咱们应该是啥?应该是RN等于一对不对,如果R等于一,那我就加上那个误差对吧?那怎么讲,首先我先把那个咱们通过比例计算而来的那个分摊,把这个金额先拿到,诶,这个应该是别名啊,怎么放在这了呢?来咱们给它CTRLX,嗯,CTRL。
08:10
啊,那这个是我们求出来的那个,呃,分摊的那个运费对吧?啊,分摊运费不是运费,是那个那个优惠优惠优惠啊这个口误啊,来咱们放在这儿,先把它拿过来。啊,那他拿回来之后呢,我是不是需要补偿那个误差,那误差咱们应该是加上谁减谁,应该是应该是这个玩意儿,这个像订单里边的优惠减去你那个分摊运惠之和,对吧,优惠之和啊那所以说这边呢,先拿到订单里边那个应该是benefit是不是amount啊,然后呢,让他去减去啊,咱们那个BY,诶是不是下面没起别名,看有没有别名啊。啊,但是也是杠杠的是吧,这个应该把它给它拿出来,CTRLX。啊,放在这儿,放在这儿,这之后呢,我们就可以选它了啊来往上走,让它减去咱们那个benefit是不是它就行了。
09:05
对不对,这误差是不是就加上了呀,那否则呢。否则就不加误差呗,不加误差是不是就用它就行啊CTRLC哎,你放在这个里边来。啊,那这样一来的话呢,咱们这个字段就算是选完了啊,这就是咱们最终的这个求完之后,经过补无偿补偿之后的那个,呃,咱们那个优惠的分摊啊,搞定了。啊,这个其实就是咱们一个完整的一个circle口了啊,那当然这里边我们呃还有两个字段没写对吧,就是他俩啊,那他俩要写的话呢,是不是跟他逻辑一样啊,也得先在第一层子查询里边先求一个什么,先求一个订单里边的总的金额,再求一个分摊之后的总金额对不对,然后呢,我们再往上面去做这个判断啊就行了,哎,这样的一个逻辑嘛,啊好,这就是咱们这个S啊,那但当然这边呢,咱们就不再呃补充了啊,这个直接把文档粘过来就行啊。来我们找到这个订单的,呃,下边应该加D层啊。
10:04
来往下走,订单明细实时表往下翻。哎,这就是这个最终完成的一个circle考剩下两个字段咱们不写了,逻辑因为是一样的嘛,啊CC。哎。那个拿过来给它覆盖一下吧,啊跟R诶这个啊,完事了啊完事了啊啊那当然这里边有些地方呢,咱们其实也是可以优惠优化一下的啊,哪个地方啊这儿呗,这儿没有必要谁来型啊啊咱们所需的字段应该只有谁只有ID province ID还有什么,还有那几个及额对吧?啊把这几个传过来就行了,其他其实可以不选的啊啊这个大家知道就行啊好,那我把这个视频录一下。
我来说两句