00:00
好,我现在给大家介绍一下,咱们接下来这块到底是怎么做的啊,大家注意观察一下啊,咱们这张表所有的字段都是什么类型的呀。是不是都是数字类型对吧?Big in或者decem是不是都是数字类型对吧?然后呢,如果说全是数字类型啊,这个字段咱们要横向拼接,要转的话呢,我们就可以转换成另外一种方法,怎么转啊,来大家跟我一起看一下啊,我们可以这样去做。咱这是不是写了很多子查询,每个子查询是不是都提供了咱们这个最终结果当中的若干个字段呀,每个字段每个子查询都是若干字段,那咱们这就可以这样去做了啊,来我们画一个图。假如说这是我的第一个子查询啊,第一个查询,然后呢,我是不是提供了这张表当中的前三个字段对不对,然后呢,我第二个子查询呢,是不是提供了这张表当中的哎456这三个字段呀,那下边一个子查询,那我是不是提供了后边的这个若干个字段等等等,以此类推啊,那下边是不是还有啊。
01:05
它是不是这样去提供的呀,那咱们现在可以怎么样给它拼到一块呢?这么做啊,将每个紫查询它这个字段呢,都补齐到最终结果所需字段的个数对不对?比如说最终我们需要这样三三这个二,比如说差不多这个七八个,就七八个吧,咱们不管它几个了啊,比如十个吧,咱们举个例子啊,比如十个,那我需要怎么做呀,把这仨字段先拿过来,然后剩余的呢,全部怎么做补齐,用什么补呢?全用零补啊,因为咱这全是数字类型,所以这我可以全用零补啊,哎,全用零补齐,那同理,那第二个子查询是不是前三个也是补零,然后后边的几个也是补零啊,哎,都是补零啊,在总理这个呢,都是补零啊,都补零啊,都不零啊,都不零。这也都不零啊,是不是都补零,补完零之后呢,那对这几个子查询,我们做一个什么操作呢?做一个union的操作。
02:04
注意啊,是union union是怎么拼来着,咱们按照那个方向是纵向拼接对吧,上下拼,也就是说这几个子查询我的字段已经补齐了,也就是每个子查询的字段是不是都是一样的,都一样,我是不是就可以用union了,然后呢,我把它们union一起UN到一块之后呢,相当于是不是得到了一个大表啊,这个表会有很多的行对不对啊,完事之后呢啊,以这个大表作为一个哎子查询。然后呢,我我们对它进行什么呀,进行分组聚合,按谁分组呢。按照SKD分组。啊,然后呢,把相同s kidd的数据分到一组里边对不对,然后呢,对每个字段进行什么进行求和,萨姆求和,那你就会得到哎,咱们这一个一样的结果啊,等你分组求完和之后,得到的结果就是最终结果了。
03:03
就跟你全外联得到的结果一样了,当然要比你全外联得到的结果还要好,为什么如果全外联的话直接选,是不是会有那种闹值现象,闹值出现呀,对吧,那它这个会有闹值吗?没有啊,就是零啊,没有就是零。是这样的啊,来咱们分析分析里边的原理,大家看看能不能分析明白啊,首先我们来看一下。假如说这就是一个SKID的,那第一个子查询啊,这就一个SK第一个字,它是不是前三个字段是有值的呀,对不对,然后其他的子查询当中是不是没有前三个字段全是补的零吧,对不对,全补零,然后呢,我分组是不是这几条数据分到一组里边了,分到一组之后呢,对每个字段求和,那他们是不是全是零,所以说你前三个字段实际上还是来自于哪儿啊,是不是还是来自于你第一个子查询当中提供的那三个值啊。这不,虽然求和,但其实得到的还是那一个子查询当中的结果,因为其他全是补的零嘛,啊,那同样的道理,其余的所有字段是不是你虽然是求和,但你得到的仍然是那一个子查询里边的结果呀?
04:10
对吧,那所以咱这分组求和之后啊,你得到结果其实跟这几个字段join拼接到一块儿是不是一样的呀,啊没啥区别啊,这区别啊,然后呢,我们再思考一个问题,那假如说我们呃有一个SKU,我没有第二一个子查学,第二子产区里边没有它,没有它如果说你要全外联,那你是不是这就会是no啊对吧,但你看它这这应该是啥呀,分组求和是不是00000是不是得到的直接就是零了呀,对吧,也不用再考虑这个把now转换成零的这个事儿了,是这样的啊,你看是不是咱们用这种方式也能实现这个,哎,类似于全外联的一个效果呀,当然这个全外联呢。啊,我们要肯定要比全外连性能要好很多啊,因为咱们全外连首先你的表很多紫杂菌很多,那再一个呢,啊,那你假如数据量也比较大,那你这个性能肯定比较差,那咱们这这种方式,你看我这有全外连吗?有John吗?是不是根本就没有John,我只有一个union啊一个拼接,拼接完之后当然有一个分组对吧?啊一个分组啊,这个性能要比咱们多边状要好好很多啊,啊这就是咱们这儿呢给大家讲的这个思路。
05:20
啊,这个思路啊,那最终这个circle我们怎么实现呢?怎么实现呀,那咱们是不是应该是先把这几个子查询啊,可以先给它,呃,直接能能直接妖念吗?能吗?不能吧,你要怎么做呀?啊是不是得补字段呀,对不对,先把字段补齐,补齐之后妖念到一起,然后再分组求和,是不是就可以了呀,应该是这样一个思路,这个这个咱们就不再一点点写了,这个太浪费时间了,我们先把这个文档这个词粘出来,然后给大家解释一下里边的东西啊。哎,往下拉。哎,这个色后就有点长了啊啊来吧,CTRLC。啊,但里边大部分东西呢,这个逻辑其实很清晰了,对吧,很简单,呃,里边东西就是各种重复嘛,啊这相当于就是搬砖了,就是啊来我们往上,诶这里边儿,呃,有这个。
06:11
有这个红字是吧,咱们看一看哪有问题啊,这是不是应该是缺一个是我这缺一个那啥吧,嗯,是是我不是我这应该是我最上面啊,最上面缺个分号对吧?这给它结个尾就行,好,这是咱们从晚点哈粘过来这个S啊,咱们看一下一共多长,呃,从1889到啊这个1889应该到这啊到2103对吧?啊,这应该是多多多少行啊这算。100多行是吧,嗯,还还行吧,也不是太太多啊,就是几百行的搜索,大家以后工作可能呃也会写啊,其实你会发现,其实这里边是逻辑很复杂吗?不是就是表都字段多对吧?啊其实主要是这个啊,看这个大致的逻辑吧,咱们看一下啊,那首先啊开是跟咱们一样,先把那个每个字段是不是先求出来啊,然后呢,用as我们声明一个,这个先声明一个临时表对吧,然后往下翻翻翻走。
07:10
到这个位置啊,是不是所有的这个子霞群都声明完了呀,跟咱一样,然后接下来干啥啊,你看啊,首先在insertright这是不是加上了一个这个呃,Select呀,Insert加select没问没问题吧,那你看啊select from哪。谁from下边这个紫查询呀,对不对,你看注意看这个括号里边啊,注意看这个括号里边啊,咱们这个括号里边从这往下翻,翻到哪。是不是到这儿啊,啊到这儿啊,这是咱们那个子查询,你看啊,这个子查询当中是啥。啊,一个一个看啊来。是不是select,然后呢,SKID,然后这仨字段,这仨字是不是下单相关的统计,然后其余字段是不是全是用零补的,然后呢,From咱们第一个子查询TP对不对,这是不是就是在对第一个子查询进行字段的补齐啊,然后下边这个select啊,然后呢,是不是对把中间仨字段求出来,然后对剩余字段进行哎补齐没错吧啊然后呢,其他的都是一样的道理啊,就是把自己的字段放在对应的位置,其余的字段全部补零啊补完零之后呢,是不是用union all把每一个子查询给它拼接起来呀,对吧?然后大家要注意了啊,注意什么问题,Union的语法啊,Union语法是什么样的来着?
08:30
啊,就是多个select进行union之后啊,你就按照一个什么处理,按照一个select处理对吧?那所以说它这里边一大串是不是相当就是一个select,所以这样呢,相当于是select什么什么,然后呢,From这个括号里是不是就相当于一个子查询呀,对吧,往下走,往下拉,拉到这既然子查询是不是得起别名对吧?然后呢,按照谁分组,按照SQID分组,相当于分组聚合吧,来上面走啊这呢是你选的SQID,这个呢是你所选的聚合函数啊,那这个就完成了,就相当于把这些字段全部都折换到一块了。
09:05
这个结果是一模一样的啊,一模一样,跟你全外联结果是一模一样的啊啊,当然的这个效果要比这个全外联要好一些啊,那最终呢,给它放到咱们这张表当天的这个分区里就完事了啊,这就是咱们这条circle口啊,这条circle考啊搞定了啊行,那我把这个视频录一下啊。
我来说两句