00:00
刚才呢,我们做完这个他这个需求一就是稍微用了一下这个包,但是我相信到现在就光讲了这个例子啊,大家还不明白这个over到底干啥用的是吧,还不太清楚,那我们继续往下看,继续往下看就知道这个O它跟。如果你不写就光这个group by的话,它还是有区别的是吧,这个区别,而且它那个区别在于这个O指定的大小啊,其实它最终。是跟你这个组有关吧,是吧?哎,跟这个组有关,好,那我们继续往下看第二个需求,他说查询顾客的购买明细及月购买总额,那购买明细我们知道select的星是吧,那这个是最细的了吧,所有的数据全部查出来,是不是最细的啊,Business这张表,但是他说急需购买总额,也就是说这地方的。还有一个some cost cost有一个这个东西,而且这个东西啊,还是月购买总额。
01:07
是月购买总不是总的吧。啊,如果说是总的那。Over,这个东西查出来应该是总的,这能这能感觉到吧,因为它是对于所有的数据,你想想看,你现在的所有数据,你只现在新你还没有分组,没有格式代码,那它就是每一条函数,每一条数据还是跟之前一样,是吧,那这个窗口的大小是不是就是。全量数据啊,但是他加了这个over跟不加over。区别在哪?如果你不加你执行这个能执行通过吗?执行不了啊,来看一下这个能不能通过。哎。CTRLC,看这个能不能通过读一下。
02:00
如果这个能通过的话,它说明什么?那我们加了一个窗口函数啊,它其实就是什么意思啊,这个窗口函数它是针对于每一条数据。开了一个窗口啊,能不能感觉到它每一条数据都有自己的一个窗口,只不过你在里边。你over,没加任何东西的时候。他每个人的窗口都是一样的吧。你看本来我们原始数据是不是这样子的。对吧,是这个样子的,然后你加了一个窗口函数,指定窗口大小,而且窗口大小是不是总量数据,因为没有加任何东西是吧。它其实这个窗口函数指的是什么?指的是每一条数据的窗口。那这条数据一个窗口是怎么样的,我们应该看下面这个数据是吧。哎,它的一个数据,原始数据是这个样子的,这个样子的,那此时你加了一个窗口函数来计算它的一个总量值,你现在发现的一个问题就是它每一条数据后面都跟着一个什么。
03:08
那个值什么,我们可以送。应该能感觉到,就是我想我想做这个操作。然后然后这张表那知道应该就是吧,啊,这个我们就不做了,因为这个要跑,等会就把我们这个数据给冲掉了是吧,能感觉到其实就是每一条数据后面他都加了一个所有的值是不是哎所有的值。啊,其实这个窗口啊,指的是每一行数据的一个窗口,他给每一行数据都开了一个窗口。都给了一个开了一个窗口,那此时我们O里面没有添加任何内容,所以它的一个窗口是一样的啊,都一样的好,现在需求变了,不是求总量总额吧,是求什么啊。
04:02
月购买总额,那怎么办呢?按月份分组行不行?分组行吗?你想想看,你如果按BY按照月份来分组的话,它最终其实呢,这个over的窗口是各个组之间的大小吧,是吧?哎,他不是说一个组有多大,它计算的一个组里边内容。那怎么做呢?还记得之前的分区吗?分区distribute。那如果说我们这个窗口。按照月份来分区呢,那会怎么样呢?那我们做一下啊,按照月份分区,那按照月份分区之前,我们先要讲一下这个函数啊,刚才是不是已经扩展了一个sub string啊,其实在还当中还有这个函数select。
05:01
我们有一个吧,去。这个是不是就很爽啊,是吧?哎,它有一个month这个函数直接可以返回月份啊,返回月份那我们就知道不用干什么,用sub string来截了吧,哎,这个就很方便了,好,那我们有这个函数之后,我们就知道这个地方啊,我们肯定要加distribute bed分区,按月份分区吧,那distribute d。Distribute。暂分区吧,其实就是这个吧。按月份进行分区来。放到这from business,那你想想看,此时我们这个O这个窗口啊。
06:01
它是一个区一个区的吧,一个分区,它这个区里边是一个月,而且我们刚才强调的,其实这个窗口是每一条数据它的自己的窗口吧。那每一条数据他自己窗口应该是怎么限定的,怎么选的。那每一条数据里边是不是有自己的什么?月份,他能不能找到自己所在的哪个区啊,他知道吧。懂我在讲什么吗?就是每一条数据,你这条数据。这条数据你本身如果是你现在不求一个什么sum,你只是简单的分一下区,那这条数据它能不能去到四那个分区里面啊。他能的吧,哎,他能的它的一个窗口呢,是按照。月份来分的,那自己他自己肯定自己知道自己在哪个窗口里面啊,也就是说四月份只要是四月份的数据啊,它都在一个窗口里边是不是啊。
07:04
都在一个窗口里面来,我们就把这个来执行一下。CTRLC。那的心是吧,加一个上。因为心是他这个详细数据,然后后面跟着的是他每个月。不同的月份的一个花销的一个总额。好来看一下前面是一月份二,一月份这有啊,那你看一月份最后的一个最后一个窗口。全都一样的吧,因为其实这个是数据怎么来的呀,是不是这些数字加起来的呀,加起来的那想想啊,还想一想,就是我们开始所说的窗口,它是针对于每一个每一行数据来的,开那个窗口。
08:02
只不过说现在你穿开窗的规则是什么?按照月份,来来来,开个窗吧。来看一下窗口,那自己每一个每一条数据,他具体在哪个月份他是知道的,他是知道的,所以他能找到自己的窗口,那你看第二个是什么。二月份的吧,哎,他自己就一条数据,那后面是不是四月份的,四月份的一个数据。我四月份出去,然后五月份六月份是吧,自己的。啊,就是按月份来开了一个窗口。哎,这个地方啊,除了了,你还可以改一下来,把这个复制一下CTRLC。这个地方。注意这个不是partition的啊,Partition的是不是建表语句里面的见的分区表啊,哎,这个地方是partition,哎哎,它也能起到这个效果,Ribu分区的效果对吧,他也能达到这个效果,来看一下它这个执行结果是否跟我们刚才用ribu它执行结果是一样的。
09:25
哎,是一样的吧,205什么23,三百四十一十二八十一样的这个地方也可以换成那个partition啊,本身它其实就是分区吧,在我们讲那个区的时候,它它的作用就是分区啊,分区后面跟着一个具体的一个分区字段,是按月份进行分区的。原本进行分渠道。这是我们所讲的查询顾客的购买明细及。月购买总额啊,其实我们还讲了一个购买总额是吧,不不看月份的。我们直接用了over。
10:01
哎,他这个窗口就是每一条数据的窗口都是over。都是O,那此时它后面的数据都是661,因为每一条数据它这个窗口都是一样的,都是一样的,那我们也就不奇怪了,为什么像开了一个窗口函数之后,它为什么能跟前面不在句不在跟过半里面的字段能跟一块用吗?哎,其实这个函数啊。它不止一条,就是每一每一行数据,它都有一个这个窗口嘛,啊,这个窗口是针对于每一行数据来开的啊,针对于每一行数据来开的。啊。
我来说两句