00:00
好了,同学们,咱们接着来学习这个MYSQ啊,前面的话呢,咱们已经讲完了17章了,对吧?那这个过程当中呢,我们涉及到了比如说这个circleql学习当中的像这个DDL啊,诶,这个DML啊,还有这个DCL啊是吧?诶以及呢,我们后边也讲过这个针对于创建表的时候这个约束问题呀,以及呢,我们谈到了其他的一些数据库对象呀,对吧?这块我们都已经讲完了,应该说呢,讲的还是比较细致的,而且呢,我们每一章呢,是不是都给大家配的相关的一些课后练习题,那通过这些练习题的话呢,大家都去学一写,去熟悉这个SQ呢,在咱们这个MYSQ当中的一个应用啊,开发中的话呢,在大家呢,就是多呃,就就能够多去更好的去上手了啊,那么在这儿呢,我们还加了一个章节呢,叫MYSQ8的其他新特性。啊,那因为呢,咱们在一开始这个搭建m my soq环境的时候呢,咱就是以8.0为主的啊,当然了这块了,咱们其实也装了一个是不是5.7啊啊,一个5.71个8.0,咱们都装了,那咱们授课的话呢,是以8.0为主,那涉及到呢,5.7跟8.0不一样的时候呢,我在咱们这个。
01:04
这个circleql药物当中啊,其实实际上呢,也会给大家做一些演示啊,甚至说的话呢,咱们不管在my circleq层面呢,去学习这个circleq了,那关于这个Oracle啊,在使用SQL层面呢,跟MYSQL的区别呢,是实际上时不时的话呢,我也会打开这个Oracle呢,来给大家做一些测试,当然了,我要没测的呢,很多场景下是因为他们都可以共用的,那这个我们专门去测试的这个点呢,就是说他们格外的啊需要大家注意的一个问题,哎,大家呢,就没有必要呢去安装这个Oracle了啊,直接呢你了解一下就OK。啊,通过这个对比的话呢,你能更好的去清楚MY是什么样子的,这是咱们的一个目的。好的,那么我们这块呢,专门呢,在提供这个章节呢,就叫做S58的一个新特性啊,你注意我这里边有个字眼呢,是不是叫其他新特性啊,那言外之意呢,就是我们在前面的这些章节当中,咱们已经讲到过,或者涉及到过一些MYS8的一些特性了。啊,大家有印象没有。啊,你包括呢,咱们从一开始讲这个环境搭建的时候呢,其实就有区别了。
02:03
就有区别了啊,比如说什么场景呢,比如说我们在安装完以后的话呢,咱们会涉及到是不是一个编码的设置,这个编码的设置的话呢,我们在5.7当中,你要不设置它就会出现乱码,那我们需要呢,去在那个买点I当中呢,就是要去配置一下它的这个这个字符集,对吧?但是在这个8.0当中啊,我们就没有配置了,因为它默认的就是UTL8这样一个这个比较通用的字符集了。诶这块应该就不一样是吧?嗯,还有一个不一样的话呢,是咱们在这个使用这些客户端呢,去这个登录MYSQL服务器的时候呢,在8.0当中呢,会出现这样的一个错误信息,这个主要是因为呢它呃,在8.0当中呢,升级的这个加密的这种方式的是吧,这样的一种加密的方式,所以呢,导致我们就会报这样的一个错误信息,那么在5.7当中呢,就没有这样的一个提示了。那这块是有一个区别,包括呢,我们到时候讲下边的话呢,咱们在这个Linux环境下呢,去安装8.0,或者呢是安装5.7,诶到时候的话呢,如果我们用这个远程连接啊,咱们在这个linus上呢,是不是安装了一下这个SQ的这个数据库服务器,那我在这个Windows环境下呢,我可以通过远程的方式呢,去连接我这个MYSQL的服务器。
03:13
这个时候的话呢,如果咱们使用的是8.0的话呢,同样的还会报这样的一个问题啊,解决方案的话呢,也是一样的啊,大家就按照我们之前讲这种方案呢去解决就OK了,那如果是5.7呢,它同样的还是不会报的啊,就是从咱们一开始呢,讲这个环境变量,那讲这个环境搭建开始,咱们八跟5.7呢就已经有区别了,包括呢,在后续的这个章节当中,凡是涉及到一些点不一样的话呢,诶,我都会给大家呢做一个讲解,做一个涉及,OK,那么呃,涉及不到的就是没法往里边去融的了,哎,这块呢,咱们专门提供了一个章节,叫做其他新特性啊,先明确一下我们这个题目的意思,OK。好了,那么这一章的话呢,我们怎么讲呢,首先的话呢,关于我们八当中新增记的新增加的一些特性呢,给大家做一个概述,哎,同时的话呢,我们再关注一下8.0相较于5.7啊,他都干掉了什么是吧?诶删了哪些东西啊,这块呢,我们也给大家做一个交代,但整体上来说呢,大家做一个了解啊就可以了。
04:11
那么除此之外的话呢,我们专门给大家挑出来两个算是比较重量级的特性啊,大家也能够看到了,我这里边儿提供的一个呢,叫做窗口函数,一个呢叫做公用表表达式。注意哈,公用叫公用表表达式,不是公用表达式啊,这个你别丢了一个表达,所以它对应的这个英文的话呢,叫common table exception common table叫公用表嘛,是吧,哎,这个叫表达式的意思,OK,行,这两个的话呢,具体是什么意思,那一会我们讲到的时候呢,再说那这两块呢,其实都还算是这个代码层面的一些这个点哈,那就相当于我们在实际开发当中啊。是不是大家呢,就可以去应用起来的啊,是这意思吧,好的啊,那首先的话呢,我们首先关注一下这个关于新特性的一个说明。啊,我们呢,一开始也就知道了,这个8.0的上一个版本,他可不是7.0啊,也不是7.9啊,上一个版本呢,是5.7,那这个内行的人呢,才能明白是怎么回事儿,当我们看到一个版本呢,这样大幅度的去跨境的时候呢,很显然呢,这个这个开发商呢,或者这个开发者呢,给我们一个暗示呢,就是你这个版本呢,里边的新特性呢,会多一些,属于一个这种里程碑式的一个版本了。
05:19
是这意思吧,OK啊呃,那么这里边呢,我们就要关注一下这个新特性啊,大概都有哪些啊,我这块呢,就简单列一列啊,咱们大体过一下就行啊,第一个啊,更简便点啊,关于这个no circle的一个支持啊,这块提到了不再依赖于相关的这个stemme啊等等的啊更好的索引,那在索引方面呢,我们下篇当中重点去讲,到时候呢也会给大家去说,什么叫做隐藏索引,什么叫做这个降序索引,那那我们如何呢去使用这些索引呢,提高我们查询的性能,那这块呢,相当于新增加的关于索引的功能呢,肯定是为了我们更好的去提升性能的,对吧?这我们下天当中给大家呢去重点讲解啊,所以非常重的一个内容。下边呢,提到了关于这个更完善的这个杰森的支持,咱们在这个数据类型上呢,就对杰森呢,其实就有这个支持的,对吧,那这块呢,会更好的进行一些优化啊,增加了一些聚合函数啊等等的去操作我们这个杰森的啊,去操作这个杰森的,包括呢,下边还提到了这个叫。
06:16
哎,我们往下找一下,嗯。这个就是相当于它针对于这个我们杰森来讲呢,它这个数据的内存空间呢,相当于做了一个更好的一个整合。啊,这是正则表达式的一个知识了,哎,这个行,一会我们看到这块这块的时候呢,再说吧。啊,看到再说啊行,然后下边呢,提到这个安全和账户的一个管理,那我们刚才呢也提到了,就是它加密了这种数据的安全性,那使用这个sa Sha是吧,这样的一种插件啊进行管理的,下面呢提到了一个indo DB啊in DB呢,作为咱们MYSQL的默认的存储引擎了,其实也不是在8.0的当中去这个做的啊,之前呢就已经是了。啊,那么它整体上的话呢,又做了一些相关的改进和优化啊,就是这个大家,嗯,你想也能想得到啊,你就好比是比如说像Java一样啊,Java里边呢,我们意识到这个Java,比如JDK这个版本去更新了,那里边呢,他要看这个官方给你提供的说有哪些新特性,你肯定能够找到GVM相关的一些内容的。
07:15
那因为它是底层的嘛,是吧,比如说给你提到说相关这个JC呢,我们做了一些优化啊等等等是吧,他肯定会提到这些东西的,但是对于我们正常来讲,这个开发者来说呢,呃,一般的话,你不需要呢去关注它这个JC里边那些代码改变的细节,一般的不用的,那你主要呢,关注的就是在我们代码体现上,呃,有没有一些新的一些用法啊,主要是影响我们这个编程上的东西,我们需要去关注的,那这个inno DB也是一样,就是他比如说做了一些优化,那我们呢,就是原来还是这个写一个circleq,然后呢,还是用indo DB。现在用的还是in度DB啊,但是这块呢,我发现比原来快了啊,快了就快了,有的时候我们也不用去深入到这个细节里边去关注它,呃,到底怎么着去做这个修修改了,因为我们精力呢,呃,这个很有限是吧,你要放到更重要的个事情上,但是你要说呢,它增加了一些功能,在我们编写SQ上有一些影响,那你是需要关注的啊啊像这种东西呢,嗯,不同的这个语言当中,它的底层结构每次更新呢,都会提这个事儿的啊,你CTRLCCTRLV粘过来都行是吧。
08:15
然后下边呢,提到这个数据字典啊,我们说的就是系统的提供的相关的一些这种表是吧,比如增加了这个事物的相关的这个数据字典了,哎等等啊这个我就不多介绍了,下边的关于叫数这个原子数据定义的这个呃语句啊这呢提到这个DDL的它的一个原子性,这个咱们在讲DDL的时候呢,诶当时我给大家讲过,哎,我给大家讲过啊,所以这块我就诶过掉了,那下边呢,叫这个资源管理啊,八当中开始支持创建和管理这个资源组啊,这个相当于是我们整个分配资源分配的话呢,更加的合理。好,这块呢,就不多说了。然后这块呢,咱们已经体验过了,就是字符级的一个改变,5.7呢,还是拉丁的,我们必须呢显示呢给它改成是U8,而在我们八当中呢,它就已经是8MB4了,这个呢给大家也简单介绍过,这个四呢,代表的就是最多呢是四个字节,表示一个字符,正常以前呢,我们一提到说这个u ti8的话呢,通常都是这个叫MB3是吧。
09:10
那MB3就是最多呢,是用三个字节来表示一个具体的字符,不管呢是UTF8啊,UTF8啊,MB3也好,MB4也好,咱们中文呢,都是知识没有问题的,因为中文呢,在这两个里边呢,都是用了三个字节来表示的。那他用MP4呢,那很显然是不是为了融合更多的一些字符进来啊,因为全世界里边这个语言呢,还是很多种的是吧,那对于咱们中文来讲的话呢,咱们就是三个字节表示一在u tai8当中啊,三个字节表示一个打字符了,那相对于呢,这个呃,比较规则是吧,这也提供了。下边呢,就提到这个叫优化器的一个增强啊,跟我们上面说这个,呃,存储引擎的类似啊,存储引擎里边呢,存储引擎呢,是我们说逻辑架构里边的一个部分啊存储啊引擎,然后液化器呢,是另外一个结构,那这两个的话呢,我们都会在。那哪块去讲啊,就是我们讲到这个夏天的时候呢,那我们过去讲这个逻辑架构,逻辑架构里边呢,就提到这个优化器了啊,提到存储引擎了,然后呢,我们专门把存储引擎呢,再拿出来讲了一个章啊是这个意思。
10:12
好的,那么关于优化器的一个优化增强是吧,哎,这个呢,就是还是跟上面的一样啊,每个版本当中他都会去提这个事儿的。好在下边呢,提到这个叫公共表表达式,这呢就是我们这块呢,要给大家去讲的是吧,那使用这个公共表,公共表表达式呢,大家其实可以考虑呢,去替换呢,我们这个子查询。哎,它可以呢,去替换我们子查询,而且它比子查询的更好的一点呢,就是呃,你一旦写好这个公共表表达式以后呢,你可以在其他的查询,或者说这个其他的DMMR啊DMMR这个语言当中,哎,这个语句当中啊,你可以去使用。而这个子查询呢,你可能只能适用于当前这个,比如查询语句是吧,你放到另外一个查询句里边,那个子查询就用不了了,而它呢,是这个可以更广泛一些的啊,有点类似于呢,它就叫做呃,咱们说过的变量的话呢,比如叫绘画用户变量啊,在整个绘画当中都有效,而你这个呃子查询呢,就类似于我们说的叫局部变量,你只在你这个,哎,这个当前的这个存储过程的begin和这个end当中是有效的是吧?哎,就这意思。
11:12
下边呢,提到这个窗口函数,哎窗口函数的话呢,嗯,它其实跟我们前面讲的那个聚合函数,比如说呃,Avg啊求平均,Sum求最啊,求总和,哎,Max求最大幂,求最小抗求个数,哎,还不太一样啊,还不太一样哈,就是聚额函数,穿口函数,还有我们说的单号函数啊,应该算是,哎,这叫三分天下。单行函数跟这个聚合函数我们已经说过了,知道什么意思啊是吧?哎,串口函数的话呢,相当于是另外的一个一类场景啊,哎,那这哥们呢,你说它是算单行还是算多行啊,哎,那其实就可以算成这种混种的,混种的什么意思啊,咱们一会儿讲到这个串口函数的时候呢,大家就清楚了啊。好,这个呢,就是列举出来了这个我们说的这个常见的窗口函数了啊,一会我们去正式说啊,然后这个正则表达式。
12:00
咱们呢,在讲这个比较运算符的时候呢,其实也提到过关于正则的一个使用了,只不过呢,我们没有细给大家展开去讲啊,因为专门讲正则的话呢,咱们可能得需要一两个小时呢,能够把这个点呢都给大家诶都测试一下啊,这块我们就不花那么多时间去测试了,然后呢,这块呢,也提到对这个正则呢,更好的一个支持叭,如说使用的UN库的国际化的这个组件呢,去实现这个正则表达式的一个操作。啊,这是这样啊,就更通用性啊,接着的话呢,就是涉及到这个内部临时表的一个存储引擎的一个变化,由这个memory来替换成了我们的叫timetable。啊,这是它的一个变化,大家现在对这种存储引擎干什么的还没有概念是吧?哎,这个后边的时候再说,哎,下边提到这个关于叫日志的一个记录。啊,日志这个记录是吧,这个日志记录的话呢,这块提到了,说在MYSQL8当中错误日志子系统由一系列的MYSQL组件呢所构成。哎,然后呢,这些组件构成由系统变量它呢来进行一个配置啊,能够实现呢,叫日志事件的一个过滤和协入啊这有一个新的小功能,下边这个叫备份锁啊,这就不展开说了啊在这这接着呢,就增强了MYSQL的一个复制,哎,刚才上边我想说那个杰森呢,就是找他这个点的啊在最后呢,就是我们这里边的话呢,哎,增强了一个MYSQL的复制呢,它对于我们诶杰森这种文档的一个支持的话呢,可以使用更紧凑的二进制格式了啊,能够节省空间是吧?啊等等等啊诶这些的话呢,都算是我们讲到的这个新特性。
13:22
那么旧的呢,哪些给干掉了呀?哎,这里边首先提到了这个叫查询缓存,这个也是咱们下篇当中给大家去讲的,哎,查询缓存呢,你一看大概知道的意思就是我们写这个搜后语句呢,呃,如果我们第一次执行的时候呢,你这时候没有缓存之说,那我们就执行了是吧?呃,这里边可能还需要对你这个语句呢,进行一系列这个校验,包括优化等等的,那如果说我们现在的第二次再去执行,跟第一个这个S呢一模一样。那我们其实就考虑呢,在你第一次执行完以后呢,把你这个SQ呢给缓存起来,下次呢,如果再来的话呢,直接就从缓存里边找这个SQL去执行就完了。啊,那按照这个说法的话呢,大家可能会想说,老师你是不是说反了。那不就是应该加上这个查询缓存不挺好的吗?那事实上呢,我们把这个查询缓存从八当中给删掉了,那为什么要删呢?因为咱们命中的机会啊,其实是很小的。
14:09
是很小的,只要你对这个circle呢,有稍微的一个变化的话,这个都命中不了啊,所以呢,有点鸡肋啊,我们就不要这个查询缓存了,那到时候我们再去细展开说,然后呢,关于这个加密。咱们在讲这个单行函数的时候啊,提到了这个数据加密的情况,嗯,比如MD5啊是吧,包括我们ha啊是吧,当然都提过啊,哎,那么关于尤其像这两函数啊,原来我讲5.7版本的时候呢,还去测试,在讲8.0的时候呢,我就哎就没法去测试了啊,因为这哥俩呢用不了了,一个呢叫加密,一个叫做解密啊是这意思。啊,然后呢,关于这个空间函数啊,有一些呢,也过时了啊,就移掉移掉了啊再接着呢,是这个杠N呢,不再是为这个闹去处理了,哎,我们因为也没有去给他提这个事儿,哎,你本来呢就是,哎你就知道他俩不一样啊就行。哎,下边呢,关于我们移除相关的一些程序呀,包括一些这个插件啊等等的一些操作呀,啊这个我就不具体展开去说了,哎,大家呢,整体上做一个了解就可以啊这呢是咱们这个八当中新得性的一个变化。
15:10
好了就过掉了啊,然后下边的话呢,我们正式的开始去讲两个算是比较重要的,或者叫重量级的,在我们八当中的这个新特性。啊,像我们上边有一些这个新特性啊,咱们是放到下篇当中再给大家去讲解的,所以我们现在呢,在上篇当中,哎,能够给大家讲的呢,我就放到这儿了,哎比较重要的这个一个呢叫做窗口函数,一个呢叫做公共表表达式。好的,那由于呢啊,这个咱们现在在企业当中啊,用哪个MYSQL的版本比较高啊呃,应该说呢,现在用的比较多的呢,是5.7。诶,昨天呢,还有个同学跟我讲说,诶宋老师,听说你这个8.0这个版本要发布了,哎,我说是啊,我马上就相当于咱们上品呢,就录完了是吧,就可以发布了,他说我们现在公司里边还没有用8.0呢,我说用多少呢,还是用5.6呢,还现在是吧,哎,这样个情况啊,呃,就是这个数据库的更新啊,其实比正常的编程语言的更新呢,还小,还要慢,应该我跟大家提过对吧?啊比如说大家如果你要是做这个Java开发的,那现在咱们Java最新的已经到Java时期了啊,然后呢,其实在企业里边现在用的比较多的主流的实际上还是这个JAVA8是吧,那用JAVA7的甚至都还有一些。
16:15
啊,有的同学说说,诶,我们公司已经用JAVA11了,即使你用JAVA11,但其实你也没有用到九啊到11这里这些版本里边的新特性主体的话呢,其实你还集中在八这样的一个版本当中的。啊,就是这样一个情况啊,呃,那么像当然这个版本为什么说这个都都已经17了,这这一减乘二才16是吧,别这样想啊,就因为它后边版本的话,它每半年更新一次,以前不是以前是三年更新一次,你现在是每六个月更新一次,那你这个号肯定是涨得快。啊,是这个原因造成的啊,嗯,这是我们说的这个事儿,那么相较于这个编程语言来讲啊,我们说这个MYSQL它的一个切换呢,花的时间会更长,你想想对于公司来讲,比如说我们这个项目呢,后台是用这个JAVA8来写的,你说我们再换一个项目,或者这个项目呢,我们重构一下,我改成用JAVA11没有什么问题,那后边我们对接的数据库呢,还是一个数据库,对吧。
17:04
哎,那你想想,对一个公司来讲,最核心的是什么呀?是我们这个这个系统,还是我们这个数据呢?毫无疑问是数据。啊,不用犹豫啊,肯定是数据了,呃,那么你想想我们数据的话,原来如果你是用5.7,那现在的话呢,我们这个数据呢,通常都还是很有价值的,你这块呢,呃,这个想现在给他做个迁移,然后换到8.0当中啊,你想想你得有多大的动力才需要做这样一个切换的。对吧,那你像你这些如果一些如果仅是一些修修补补的一些小特性,那我们就没有必要呢去做这个切换了,你比如说5.7当中默认的是拉丁的啊,你这个呢,默认的是这个U8的,那我都已经用了5.7了,我肯定都改成UTL8了。那你因为这个点我肯定不会有动力去更新成你8.0的呀,对吧?诶哎,包括呢,我们说底层做一些优化等等的,除非呢,明显已经看到5.7中出现瓶颈了,而且8.0非趁的解决了你这个问题,那我们才会有一些动力考虑做数据的迁移,而且呢,这个事儿还是慎之又慎的,非常小心谨慎的做这个数据的这个迁移工作。
18:02
OK啊行,那就是相较于编程语言来讲呢,这个数据库的迁移呢,对于公司来讲,它更慢诶更慢啊,你像对于百度这样的公司,现在呃,轻轻松的你拉一波人呢,去写个存储,存储引擎搜索引擎是吧,那那很容易,甚至说呢,你像比如说现在腾讯也好,阿里也好,包括像这个头条也好,都不要财大气粗嘛,那你直接呢,把这个,呃,百度里边这个写存储引擎的核心这帮人,哪怕你这个拉出来是吧,可不可以啊,可以,但问题是百度已经积累了这么多年的这个。呃,数据存储量了啊,那个你这个量你是超不过人家的,所以你用百度去搜索呢,能够很好的搜索你想要的这个信息,你要用其他的这个搜索引擎呢,那就差点意思了,甚至很差点意思啊,原因就是在这儿啊,人家的这个数据量现在达到什么级别,你其他的搜索引擎才到什么级别,对吧,OK啊。好,那么咱们拉回来,那咱们就来看一看这里边儿咱要讲的这个行特性啊。新特性的话呢,这个窗口函数呢,咱们这个采用这种轻量级的方式给大家去做这个讲解啊,就是呃,因为我这呢,相当于是有个词叫什么词刻自己是吧?哎,我一开始在接触这个串口函数的时候呢,也有点摸不着头脑啊,像这块呢,提到了串口函数的一个描述啊,看了以后呢,我也晕里乎的啊,然后呢,这块有一些具体的这个函数摆到这儿,摆到这儿呢,还不像咱们说这个单行函数和句构函数,哎,这个很简单的两行代码呢,咱们就搞定能够出效果了,这个的话呢,哎,始终感觉理解的差点意思。
19:29
啊,然后呢,呃,后来呢,再去啊研究再去看啊,终于呢,把它弄清楚了,啊是这么着,所以说这块呢,呃,我在讲这个时候呢,我就把这个课程呢,给它整个呢重新构构建了一下。啊,这个根据相关的一些资料啊,还有我自己的一些思考啊,啊教学这样的一些教法方面的一些这个这个这个特点是吧,哎,我就给大家重构了,来咱们这块呢,诶争取用最少的时间让大家达到最好的吸收效果啊怎么来做呢?诶你看咱们来讲啊。好,为了大家让大家能够更好的去理解这个窗口函数的使用,哎,咱们呢,基于以前的一个需求,诶以前呢,你看我们怎么做,然后咱们看看咱们现在呢,用窗口函数以后它怎么做,让你瞬间呢先感受到啊这哥们儿呢,原来还确实挺好使的。
20:13
哎,确实挺好使的,好了,哎,好了啊,那咱们这块呢,来看一下,首先的话呢,我给大家举一个例子啊,通过这个例子我们看一看这个使用串口函数前后的一个对比,这儿呢,咱们有一个表叫做sales这个表,然后这个表的话呢,列举出来了啊,咱们相关的这个,呃,这个ID呢,就是这个主见了啊呃,相关的这个城市,我以北京和上海为例,列举出来了它的这个康体,注意这康体不是count啊,Count体就是区,海淀区,朝阳区。哎,黄浦区长青区,然后这里边儿呢,它的一些销售量。哎,销售量呢,就列到这儿了,哎,这就我们一些销售数据啊,那咱们一边说呢,咱就一边呢,在这块呢去做这个测试,好,那这块呢,咱们就哎先去声明咱们这样的一个文件了,对吧?哎,这是咱们这个第18章,OK。哎,这个咱们叫MYSQL,哎8.0对,哎其他非常严谨的哈,哎新特性。
21:09
嗯,首先呢,咱们把这个文件呢,先保存一下啊,CTRLCCTRLS。啊,这个我们在这儿啊,CTRLV保存一下。稍微大一点。啊,那首先的话呢,咱们来谈一谈,这个叫哎,窗口函数。好的。那这块的话呢,我们要这个整错了,哎呀整错了,咱这是5.7的是吧。嗯,这个。重来一下啊。找到我们的文件,找到我们的代码。嗯,现在这块呢,我把它就关掉吧。把这个文件我就先删掉。不要了啊。好回过来咱们呢,在8.0里边去做了演示,你五点现在也演示不了,这是咱们说8.0的新特性的,对吧。好,重来一下啊,这个粘过来,嗯,然后呢,CTRLSCTRLV啊保存到这里边好了。
22:01
首先我们说这个第一个,哎,窗口函数。啊,那这块我们做这个表的创建的话呢,首先呢,咱们还得有这个数据库啊,不妨我这块呢,再去新创建一个create一个database。嗯,这个咱们就DB test18。哎,最后一张,好,终于我们看到曙光了是吧?哎,那上篇完了以后呢,紧接着还得给大家去录这个下篇。啊好,首先我们先执行一下。接完以后的话呢,我们接着呢去做一个use DB test18。好,这时候我们选中执行没问题,已经切换到咱们当前这个DB test测18这个数据库下了F5刷新一下就它好,目前的话呢,这里边没有任何表,那我们为了演示这个窗口函数,它这个效果,哎,我这块呢,就先写一个叫算是1.1啊,演示窗口函数的一个效果,那我们就对比的话呢,是不是才有效果呀。你看好多电视广告,广告不都这样做吗?你干说这个东西好没有用啊,你就告诉我用之前跟用,呃,用它之前跟用它之后的区别是什么,效果立竿见影啊,这里边儿呢,我们就来做这样个说明,首先呢,我们要想说明这个事儿啊,咱们需要呢表,哎,我这块呢,就把这个表呢先创建一下。
23:11
行,然后呢,把这个数据呢,添加进去。这里边儿呢,我们数据不多,就只有四条,这就足够呢,说明我们这个问题,我们叫sales。好,这是我们选中的执行,刚才呢,也简单的做了一个介绍,就是我们这个城市还有不同的区里边它的销售的一个数据。好了,那我们现在要做什么样的需求呢?需求呢摆到这儿来了啊,CTRLCL一下我们粘过来。看一下。这个需求呢,是这样子的,说现在呢,需要去计算这个网站啊,这这个网站上的一个销量啊,这个网站呢,在每个城市的销售总额,每个城市的销售总额,那你这块是30,这个是40是吧,然后在全国的销售总额,那像全国的话呢,就加一起这是多少?70吧,销售总额好每个区的销售额占所在城市的一个比重。
24:05
你比如说我们这个十是不是就相当于占你这个30的,就是百分之,哎相当于十分之,哎这个晕了,哎,总共是30,然后呢,你这占十是不是1/3啊,这个2/3是吧?哎,这个比例是多少,以及呢,你占全国总销量的这个比例是多少,总共是70,那你这块海淀区相当于是1/7吧,这是2/7是吧?哎,这个你得把这个呢都给我计算出来。啊,而且呢,你得在一个表当中给我呈现出来。这个一看的话呢,稍微有点那啥。有点那个一个S搞不定是吧,哎,那这块呢,我们看看用传统的方式呢,怎么去实现。传统的方式去实现呢,这块呢,咱们顺便呢,给大家再提一个点啊,以前咱们没有去提到,就是创建一个临时表的一个意思,创建一个临时表,OK,那我这里边呢,创建一个临时表,首先的话呢,把咱们整个这个销量呢,咱先给他都算出来,好我们选中呢做一个执行。可以了,对吧,那这时候我们去select。
25:02
Select from一下我们这个A。哎哎,我们选中呢,做一个执行,那全国的话呢,一共是70啊,具体单位呢,就没说了,78啊,70多少的是吧?哎,这个70就出来了,这个能理解是吧,那就可以了,好,那这块呢,我们做一个临时表呢,现在就先放到这儿。然后的话呢,我们再去计算一下每个城市的这个销售总额,来来我们CTRLC一下。啊,这块呢,相应的这个语句呢,除了这个这个临时的这个词我们不认识之外呢,其他的大家都比较熟悉了,我们这块呢,是不是就以这个C呢,进行一个分组啊,那分组完以后呢,是不是一个城市就只占一行记录了,然后看一下这个城市的销售总额是多少,好我们这时候再选中去执行。来,我们再去啊,Select。那行from一下我们这个B。哎,选中。周期北京的话呢,是总共30,上海的话呢,总共40,诶我们计算这个,包括我们刚才说这个意义是什么呢?咱这块不是涉及到了你这个区呢,占你所在城市的销售额的比例,比例是多少,我们这块需要把三十四十不都得算出来吗?以及呢,你占总共的销售额是多少,那我们这个70呢,不就得算出来吗?
26:10
哎,这块呢,都是为了我们最终呢,去写这一个这个最终的这个查询呢,这个来服务的啊好,最后的话呢,我们就写了这样一个查询。我这个呢,因为要把这个呃,查询显示数据呢列出来,所以我是用的那个命令行演示的啊这块呢,咱们就直接粘过来,我把这个。哎,箭头呢就去掉了,呃,这块的话呢,咱们利用前面讲过的知识点呢,是都可以来实现的,我这儿呢就不去亲自给大家去写了,咱们把这个问题呢说清楚就可以了。看着好像挺乱的,其实不乱,其实不乱,我呢,先跑一下。大家看到效果,那就知道咱们接着怎么说了,咱们现在的话一共是几个表呢?应该说是有三个表。那一个呢,就是本身我们刚才呢,有四条数据的那个表,再加上咱们是不是又创建了两个临时表,OK吧,哎,好的啊好,那这块我们去显示一下,就是这个sales呢,就是我们最初的那表,那个表的话呢,有城市是不是还有具体的你这个叫county是一个区啊,城市区是不是本身就私条记录嘛,然后呢,你每个区的销售额是多少,是不是还是你自己这个sales表里边这几个信息嘛,所以这一行的话呢,显示的就是咱们原来这个sales表里边的,诶那几条数据实际上呢,是不是就这块。
27:19
好了,然后接下来的话呢,我们这块呢,要显示你这个城市的一个销售额是多少。那城市的一个销售额,这不就跟我们刚才上边呢,创建的这个表呢就相关了,这个表呢,不就有两条记录,那一个呢是北京的,一个呢是上海的,那我们就进行一个表的一个连接的,连接的话,连接条件就是他们的CD的也是一样的啊,CD得是一样的,好,那你上边呃,上边是啊,它是先列上海了啊,那不管你是先列上海,先列北京也好,然后你第一个呢,北京跟北京呢去匹配。啊,比如说上海的上海第一条跟这个上海匹配,第二呢,上海是不是还跟他去匹配啊,啊没有问题,就好比是你多个员工都在同一个部门一样。啊,这就好比是员工是吧,哎,然后呢,这个多条记录啊,多个员工,然后部门的话呢,就是有些员工呢,都在那个部门,有的员工呢,是都在那个部门啊这个意思啊,这呢我们就连接上了,连接上以后的话呢,我们就可以显示一下你这个,呃,我们说啥呀,就是你这个市里边的这个销量,这不就我们刚才创建的这个表吗。
28:17
他的这个销售额啊,上海的都是40。北京的话呢,都是30,那这不就出来了是吧。然后下边呢,我们需要计算一下你这个占你所在城市的这个比例啊,那不就是用我们刚才的上面这个这个值得到的,然后去除以我们前面的这个值吗?就相当于是你用这个值呢,去除以这个值不就出来了吗?那这就行了是吧,哎,那相应的下边一个大家就更清楚了,我们再引入一个A表,哎,同学看,诶说老师你怎么引入这个表呢,没有加这个连接条件呢,因为我们这个A表的话呢,是不是就只有一条记录啊。就刚才我们这块呢,你看查看一下,它不就只有这一条记录吗。啊,也用不着我们再去保留这个什么department这个这个叫什么呀,它这个城市啊啥的,你保存还还不行了呢,啊,因为这里边儿呢,他也没有写具体的城市,就是完全的合在一起的,对吧,好的,所以这个呢,你也没办法去写这个连接条件。
29:05
那OK啊,那这块呢,我们就把这个表呢再引进来,引进来以后的话呢,我们就把这个A呢,这个数据呢往这一摆啊,那你这块呢,不是四条记录吗?是不是就是哎,四个都显示出来了,这你要非要去硬讲,这算是个笛卡尔机,因为你前边这块呢,到这儿查完以后呢,是不是就是四条记录是吧,我们这块呢,只有一条记录,那你就是四乘以一呗,所以结果呢还是四,所以在显示的时候呢,这个位置全是这个。哎,这个一里边的这个70,然后呢,你再让,哎前面你得到的这个值是不是去除以我们这个70就行了,这不就是这个式子吗。好,这个大家应该能看得懂啊,我就做了一个剖析好了,那这块呢,我们就实现好了,这种方式呢,算是咱们的一种。按照之前的这个知识点呢,咱们去实现的一种方式。我在这块写一下,这叫来实现方式一没问题,好,哎,还是这个写了好几个语句的是吧,然后接着的话呢,我们看一下这个叫方式二,我们就可以使用这个叫做窗口函数去做了。
30:03
那是用这个窗口函数去做了,怎么做呢?那直接呢,诶是这个吧。嗯,直接是它好,我把这个呢拿过来啊,CTRLC一下。好,CTRLV这里边儿呢,我们把这个呢,就先给它去一去。哎,就这么着了是吧,嗯,这里边的话呢,整体上来看好像差不太多,区别呢,还是有的,你像我们说这个over,哎,Position是吧,BY啊city,然后这块呢,Over啊像这块呢,这都是啊,这块呢,这块我们得到呢,哎,得到一个它这样一个值,然后呢,哎,这就是over的啊这样的方式,就这块呢,其实它都算式的啊来我们这个呢,就不去细讲了,整个呢,我们看一下这个效果走起。你看变都没变,是不是还是这个表。啊,查询出来这个结果集,所以说呢,我们用这个呃叫窗口函数的方式呢,哎,比上面呢好很多,首先的话呢,你这个实现的这个步骤,你上面写了好几个,我们这块一个就搞定了,这方面来讲是不是效率上就更高一些是吧?那另外的话呢,你上面还创建了好几个表,那数据的话呢,相当于是又做过一些复制,我们这块呢,是不是就拿着原来的最初的那个表去实现就可以了。
31:11
哎,这是效率上,包括从空间上来讲,是不是也是相关的这个优点啊,优点呢,大大的好是吧?好,那通过我刚才这样一个举例呢,大家应该能够感受到这个窗口函数的一个魅力了啊,一个魅力了啊,这块我也写了一个啊,针对这种分组的每一条结果进行记录的,他更好,大家可能看不懂,好下边我们来看一看关于窗口函数的一个介绍啊。嗯,从8.0开始,这个MYSQ呢,开始支持这个窗口函数。说窗口函数的作用啊,类似于在查询当中对数据呢进行分组。哎,那大家想,哎,那是不是跟分组函数有点像呢?还不是啊,不同的是呢,分组呢,操作会把分组的结果聚合成一条记录,而窗口函数呢,是将结果置于每一条记录的每一条的数据记录当中。
32:02
啊,大家呢,可能看到以后呢,应该比较迷糊。啊,我一开始看到时候我也迷糊啊,哎,我就直接呢,就上上上这个具体的例子,我开始去写了,那写完之后的话呢,我再来看啊,发现写的还是很清楚的。还是很清楚的啊,来我给大家做一个解释啊,这个这个主函数的话呢,咱们已经很清楚的,你像咱们刚才写的这个。我从这个B表呢,去查的时候呢,咱们不是group by这个city对吧?嗯,虽然说这个表里边只有四条记录,但是也足以说明问题了,一旦我们按照这个字段呢进行分组了,那咱们想想结果当中凡是同一个CD的。是不是就最终呢,呈现出来的只有一条巨啊,那有可能我们有,比如说这个北京这块呢,可能有这个,诶七八个这个区呢,但是我们一旦要grow by city的话呢,是不是他就把这些数据都捏成了一条记录了。这个应该没有任何意义吧,哎,大家应该能听懂是吧?好了,那么这个窗口函数呢?它是什么样的场景啊?我给大家举咱们最熟悉的这个员工表。
33:06
那这个咱们举例就完了,下边呢,咱们开始去介绍相当于这个串口函数。改窗口。好的啊,那那举个例子,那我这块呢,还是做这个select,我select行from一下我们这个employees OK,好,那这块我们选中的组合执行。啊,激动了啊,咱们这是不是也没有啊,咱也没有这个选空表是吧,好create一下啊。这个table啊,In employees,然后呢,As。Select听from at,硅谷DB。哎,这个这个employees是吧。这样呗。好,那这时候我们把它呢,选中啊做一个执行。好了,然后这块我们再举起select啊,这时候就有数据了,那么大家你看啊,咱们这里边儿呢,我就以这个例子来说吧,每个员工呢,都有这个部门ID,那如果呢,你要是叫诶group。
34:06
拜。哎,Group by这个department ID最终的结果呢,是不是就出现了,凡是一个部门的员工,那是不是就是大家都归成这一组了,哎,然后又是一呃归成一行数据显示吧,然后又是那一个部门的,哎,归成这一行显示啊,所以说这块呢,我们可能最终压缩完以后呢,就只有十多条这个十来条这个记录了,成这样了,那这呢是这个组函数的特征啊,你归到一块以后呢,比如说你求个AG啊,你求个count呀,求个sum啊,就这样一个场景,对吧,那我们这个窗口函数呢,哎,它这怎么办呀,我说呀,它介于咱们说的单行函数和这个。呃,和什么呀,和这个分组函数或者叫局偶函数之间。怎么讲呢,如果我们使用了一个窗口函数,我先不告诉你说是干什么用的啊,我使用了窗口函数,使用完以后的话呢,它的输入结果呢,还是107行。还是107行,那么从这个角度上来看的话呢,是不是挺像单行函数的呀。
35:01
对吧,哎,没问题,好,那么从哪方面呢?像这个呃聚合函数呢,哎,我用上这个分组函数以后呢,哎我呢就把这个是同一个部门的,他们都放一起了,你比如这个呃这这这块这是90了啊,比如我们这块呢是90,下边这块呢全是60,在后边这块呢,我们表当中呢,有可能后边的添加的员工呢,是不是还有可能是在60呢,是吧,但是呢,你只要是同一个部门的,我就全部都把你们放到一起。啊,就是最终的效果的话呢,就是哎,比如说咱们从头数吧,就十号部门呢都在这儿,然后20号部门呢都在这儿,诶30号部门呢,都是这边显示的,然后40号部门呢,都是这边显示的。同学说老师是不是排序的,呃,这个没有排序啊,这就也算是一个分组吧,就是这个字段呢,跟它一样的呢,我们都放在一起,都放在一起,那前面这块呢,还是你一条一条的记录,所以总共来看的话呢,还是有107条。啊,那从这个角度来讲,你看它把一样的放一起了,有点像分组函数,或者叫聚合函数,但是呢,又不太一样,是吧?这就是说串口函数,它为什么说介于这个单行,这是我说的啊,介于单行和这个哎,这个聚合函数之间,那我们这样弄的好处是什么呢?我举一个需求,你比如说我们这块呢,是不是列出来每一个员工的工资啊,哎,然后这呢,就是他所在的部门,哎,那我呢,可以列出来,比如说这个部门的一个最高工资。
36:20
这个部门你都放一起了,是不是能求来最高工资,然后呢,再列一下,呃啥呢?哎,就是我按照这个部门让他排序,最下边这个不就是最高的嘛,啊然后呢,在每一个员工呢,你还有自己的工资,我这块我加个字段说呢,呃,列举出来每个员工的姓名啊,Employee ID,你自己的工资和你自己部门的这个,比如说最高工资,以及你和你部门的这个最高工资的一个差值是多少?对吧?差值是多少,那我们怎么做呀,你就可以用这个窗户函数,那不就相当于是大家是一个部门的,不就放一起吗?我们再要求它,那自然的去order by,按照salary排个序,那最下边不就最大的吗?然后我们找通过一个,通过一个窗口函数,这个窗口函数呢,就能找到这个最后这个最大的,然后找到这个,这里边这个最大的话呢,那自然而然的你让每一个啊,让利最大的去减去每一个,呃,员工的工资不就是他们那个差值吗?
37:10
就出来了,那我们就可以用这个窗口函数呢去实现。呃,我感觉我说的应该相对清楚了啊,不知道大家理解呢到不到位啊,如果理解不到位啊,没有关系,咱们下边呢,不就开始来讲嘛,哎,下边这个例子呢,多的啊,多了以后呢,你回过来你再去看我刚才说的这个事儿,你可能会更清楚。啊,你看这里边儿,呃,经过我刚才这样一个讲解,你再看能不能理解说呢,不同的是什么呢?这个分组就是分组函数,或者叫聚合函数,它会把呢,分组以后的结果呢,聚合成一条基础显示。这个,而我们这个窗口函数的话呢,它会把结果置于每一条记录之上,就是你该有多少行记录107行,还有107行啊OK。然后具体的话呢,窗口函数又分成静态的和动态指数啊,这个就大家先了解一下就行啊,随着记录的不同而变化啊,这个窗口大小是固定的啊,不会因为记录的不同而不同啊,这就了解了就行,下面我们主要看应用哈。
38:03
这呢是列举出来官方的这个窗户函数的一个地址,大家你可以按住CTRL键啊,这块呢,就能够打开这块呢,诶官方呢,它的一个描述的位置。啊,就像我们这个number呀,有它的怎么应用啊,哎,这就这个意思啊,好这块我们就不看这个官方了,哎,咱们直接看我这个课件。这儿呢,我把这个呃,窗口函数的话呢,这个归类归类分成这样一些类啊,序号类的,分布类的,前后函数的,首尾函数的,其他函数的,OK,然后咱们下边呢,就一个一个的带着大家呢去熟悉一下啊,还是非常到位的啊。呃,下边呢,列举出来的是咱们这个窗口函数,它使用的一个语法格式啊,使用语法格式啊,我首次看到的时候呢,我也感觉有点懵啊,你说这个呢,基本上算是了解一下吧,他又整了个这这个结构,他一下子就给干懵了。啊,当然呢,出于我们这个知识的这个完整性呢,我这儿呢,还解释了一下,关于这里边每个位置这个应用,我就不在这干说了啊,我一干说的话呢,大家估计也听不懂,因为咱们也没有例子嘛,咱直接呢上例子好吧好吧,那下边呢,咱们就来做个说明啊,具体介绍这个串口函数啊,然后下边呢,就是我们具体的这个应用啊。
39:07
具体应用的话呢,我们还是呢,通过这个表呢,去给大家做这个解释啊,CTRLC,呃,为了更好的去说明咱们这里边儿的这个窗户函数,我就不用咱们员工表了,因为这些数据的话呢,嗯,不太具有代表性。虽然说大家对这块很熟,但是我们还得放弃它,我这块呢,就提供新的表和新的表数据啊。这呢是一个准备工作。哎,所以我得让大家呢,是不是既听得懂,听得透彻,而且呢,还尽量的用的时间要短一些啊,那这块呢,我们就得需要呢,哎,我这块呢,更好的去设计这个课才可以。啊,更好的去设计这个课。好,那首先的话呢,咱们是在这个数据库下先创建一个表走起。在添加一些表中的数据走起。啊,现在看着风轻云淡,当时都得一点点去设计啊,好,Select星from。
40:02
嗯,咱们是叫固子啊。来,我选中。执行出来了,咱们先熟悉一下这里边儿的东西啊。嗯,这呢是就相当于你在淘宝比如买东西的时候呢,它后台这个数据表的一些数据了啊,这里边我们说一下大家这里边的主要字段啊,ID的话呢,就是你每个商品的这个编号了,然后这呢是它的一个分类啊叫category ID啊分类,那分类呢跟下边这个是对应的,有女装女士精品这块呢是一类的,所以都是一,户外运动呢,这是一类的,所以我这块都是二,整体来讲的话呢,相当于是有两个大的门类,对吧?然后在女装女士精品这块呢,有具体的一些啊,适合女生穿的这样的一些。呃,算是一些这个这个产品吧,是吧,然后以及每个产品它对应的价格啊,它的这个量啊,它的这个呃,时间啊,更新时间啊等等的啊这块呢,其实不是我们要说的这个重点了啊,这个所以这块你看我这个时间呢,也都算一样的啊。然后呢,这块户外用品呢,户外运动呢,也同样道理啊,具体的是什么户外的这个装备,然后它对应的价格啊等等这样的信息。
41:07
这里边儿呢,我们主要想关注的这个字段是什么呢?就是来涉及到这个它的分类的问题,还有它这个价格的问题啊啊,当然这个呢,是咱们下边讲的时候呢,大家就知道了。那这块呢,我们就看到这个表数据了,这些没有问题,好,然后呢,我们就分拨呢,来给大家去做介绍啊这呢不是说有这么多函数嘛,咱们就一个一个来。第一个呢,叫做序号函数相关的啊,我们首先给大家介绍一下,叫做row number。哎,我就看R了。嗯,就是这个序号函数。这里的话呢,我讲解我就不一个个去写了,这个咱们花的时间呢就太多了啊,我这块呢,就直接呢,这个这个1.1啊。啊,或者直接就第一个啊,哎,1.1吧,省事。咱们直接呢给大家做剖析。这里啊,是我们的这个需求CTRLC。来回粘。
42:00
啊,这呢是我这个需求。然后呢,诶,我把这个需求对应在咱们这个实现方式啊,我CTRL一下拿过来。直接呢给大家去分析。我现在呢,要查询这个固子这个数据表当中每一个商品分类下边的价格,哎,让按每个商品分类下啊,然后按照价格呢进行排序,每个商品分类一下,什么意思啊,就是你先显示这个一的后选这的,有同学说诶这不是本身就是嘛,那是因为咱们这块这个ID呢,我在添加的时候呢,就是先全部把一填完后呢,是不是全部把二签完的,那真正的话呢,实际当中有可能你下边一个第13条数据又是一的。啊,这是有可能出现的啊好,那总之的话呢,就是你按照这个门类的话呢,你先给它区分开,然后的话呢,你按照具体门类里边呢,这个价格的话呢,是从从从低往呃降血啊从高往低,从高往低呢去显示,现在的话呢,它不具备这种有序性。啊流行性哎,然后呢,你排完序以后呢,给我们整一个字段啊,这个字段呢,叫做road number啊number你看就是行号嘛,诶你显示一下每一行的这个号啊,就是这个意思。
43:05
好,那select啊,这个select整个呢,我们去分析的话呢,整个这一行相当于是不是查询一个字段啊,咱先不管,我去select ID category ID category name。Press stock,然后from goods,这是不是就是我们这表中前几个字段啊,哎,没什么大不了的,关键的就是我前面是不是加了一个字段啊。哎,我加了一个字段,那这块我们来整个跑起来走起。好,大家看这个时候的话呢,我们加了这样一个列,后边呢,其实还是这样啊,加了这个列的话呢,它的号是123456,诶你看到六以后呢,我们又一个123456。哎,为什么到这重启呢?因为你这个category呢,是不是一,哎是跟二不一样啊,一的话呢,我们123456,你二的话呢,又是123456,哎大家各自排各自的。哎,就是这个意思,那我们这里边现在就是用的最简单的这个啊,算是窗口函数了,怎么来做的呢?你看这里边提到叫position by category ID,以前的时候呢,咱们说分组函数是不是叫group by啊,叫分组,我们这呢叫position by,叫分片啊,或者叫分区,按照我们这个category,首先呢,就是你11的放一起,12的放一起,这块呢,就是类似于咱们说的叫go的意思,但是呢,它没有说捏成一行,还是呢,是不是一条数据占一行。
44:19
哎,先把它们都放一起啊,然后的话呢,比如说一呢都放一起之后,二的都放一起了之后,那那么后边干嘛呀,因为你每一行数据还是一条的,我们有一个order by,咱们按照这个price的一个降序排列,是不是,你看是不是就降序排列了。这也是一样的降序排列。好,没有问题,然后这个你写完之后的话呢,我前面加一个over,然后再前面对应的就是针对于你这波数据,你想干什么呢?我们现在是想取一个叫rule number,就是取一个序号嘛,咱们现在就叫序号函数啊,就取一个序号。哎,然后整个取完这个序号呢,我们起个名字叫做number而已。啊,就是这样简单。啊,123456 123456。啊,这个大家可能说,哎这这个好像这干了啥也没感觉干啥呀,哎这个咱们一点点来嘛,哎咱们接着往下看啊,只不过这一波呢,他关专门是跟这个,哎这个叫什么序号相关的啊。
45:09
诶,我这块我又写了一个这个需求,这个呢,稍微的比上面那个要麻烦一点啊,这个大家如果想看的话呢,我就粘过来。啊,后边的话我就不一定每个都粘了啊,大家你下来了也可以自己再去分析嘛,对吧,课件呢,都给到大家了啊。啊,大家看看我们这个。哎,走起啊。哎,这么着啊,这个的话呢,其实是在我上面这个例子的基础之上,什么意思啊,你看我这有一个括号是吧,我说一下整个这个我现在圈住在这一部分,其实就是我们上面这个操作。就完全跟他是一样的。啊,你看一对比都一样,好,那我们把这个呢又放到这个from当中了,相当于让这个查询出来结果是不是当成一张新的表了,然后我这块呢,Select星相当于还把你这个里边的每个字段都取出来啊,那这块我们做这样的一什么呢?我加了个where啊,哎,我只想看你这个一的这一波跟二的这一波里边的前三条记录。
46:01
所以呢,我们相当于上边这块呢,是不是只要这仨了,哎,下边这块呢,只要了这仨。哎,我这个红框呢,就是我现在运行这个结构呢,它能够查出来的这个结果,哎,走起。是这意思吧,那就比上边这个呢,稍微复杂一点,所以这个查询的是这个商品列表中每个商品分类下价格最高的三种产品的信息。啊,你想这一说是不是我们实际这个生产当中呢,确实有这样的需求吧,啊,OK的啊。好,那这个呢,我们就完了,然后下边呢,我们说一下这个叫啊。Rank。这是我们说的这个1.2。感受一下他。这几个的话呢,都是属于这种序号性质的啊,嗯,我们还是看这个举例。哎,弹过来。说呢,使用这个run函数呢,获取一下good这个商品列表中各类别,呃,价格从高往低排序的各商品信息,大家可能一看的说,诶怎么跟我们刚才这块好像说没什么区别是吧。区别就在于我们现在用的这个序号呢,这个规则呢变了。
47:01
来,我们把它呢,CTRLC拿过来。拿过来了是吧,大家呢,你可能会发现呢,我这块呢,相较于咱们一开始写的上面这个例例子呢,主要区别就是把这个函数呢,换成了这个函数了,其他的话呢,你看这块呢,还都是一样的啊来我们走起,那这块呢,区别在哪呢?首先说一下咱们上边这个呢,我在执行的时候啊,其实这个数据呢,设计的还是非常到位的,我们会发现你细节去观察的话呢,对于这个第一类的这块呢,你看有两个商品,你看它都是89块钱是吧,下边这块也一样的,都有两个是399.99,那么我们在这块排序的时候呢,按正常咱们讲。啊,你这不是按照这个price降去排了。那么这块呢,这两个数咱们就一个写成二,下边就写成三了啊,依次往下顺的,这就是按照一个行号啊依次递增的,每个号都不一样,而我们这个rank的话呢,它就有区别了,你看我们这时候执行,当我们这个俩89是一样的时候呢,咱就给人家俩呢都叫二。哎,给人家俩呢就都叫二了,那由于呢,你这两个二呢都占了以后呢,下边这个呢,它就直接从四开始了。
48:06
啊,直接就从四凯那开始了,这个我们在实际当中是不是也有这样的场景啊,啊就说比如说清华大学啊,只录取三个人。啊,或者咱们叫前三名嘛,那你说这个这个哥们儿他算是第几名啊啊,你说人家从成绩上来看的话,这不也算第三名嘛,但是从名次上来讲呢,他就属于第四名了是吧?哎,像这种场景的话呢,我们就用的相当于是这个叫rank。啊,人家就管住了这三个人。对吧,他就有这样的场景,诶或者说有的这个,呃,公司也好,或者说一一些这个商业活动当中啊,说这个他就一等奖二等奖三等奖各一个人啊冠押季军是吧,各一个人,然后这块的话呢,诶这俩个人发现这个分一样了,那怎么办呢?哎,那这俩呢,就占了这俩名额了,哎后边这个呢,就还是第四名就不给他这个名额了啊也有这样的场景。好,这个呢,我们说的就是它。啊,说的就是他啊行,然后这块呢,还有这个例子,这个例子类似于我们上边举的这个road number里边的,呃,第二种情况还是呢,把这个表呢放在里边,然后我们在外边包了一下,呃,只查询这个叫CATEGORY1的里边啊number小等于四的这个数据,那就相当于是只取我们这里边的这四条数据了。
49:12
哎,这四条数据啊,这不就这吗,我就不演示了好吧,行,然后再下边呢,就是这个函数,哎,这个函数的话呢,你看跟我们刚才讲的这两个又有什么区别呢。来,我们一点三一下。啊,就是这块呢,大家理解了以后呢,其实写的话呢,也比较简单啊,也比较简单了,这块我就不花这个时间呢,带大家去写了啊,这个我要写了,你看这个咱们这个整个这一章的字数呢,也不少,花这么多时间呢,大家可能在实际开发中,目前应用的还比较少啊,因为我说到了很多企业里边现在还没有用到8.0,你也用不了这个窗户函数是吧,所以呢,我们先知道啊,这里边儿这个功能的强大啊,至于说以后公司呢,有8.0了,你再考虑去应用啊。好,大家看。嗯,还是我们熟悉的这个操作,只不过呢,把这个函数呢做了一个替换来,我们选中呢走起。
50:04
哎,你看这时候区别是什么呢?在这时候就这样场景了,还是这个降序,那这俩都是89呢,人家俩都是二是吧,这没问题,关键的就是下边这个到79的时候呢,这个呢,你看我们把它标成是三了。因为它俩呢,那都是二。啊,那下边也是一样,到这俩这个399.99呢,它俩都是四啊,这个位置呢是写的五,而我们要用上面那个rank的话呢,这块是不是该写六了呀,那这个位置该写四了。能理解这个意思吧?啊,就是在有一些场景下的话呢,这种情况呢,呃,就就就是会按这种情况来出现,不是按照我们上面那个函数的。啊,印象很深刻,就是咱们这个今年是不是开的这个奥运会吧。啊,今年这个有疫情啊,本来是这个之前开的,就今年给开了啊,这个奥运会的时候呢,是是跳高吧,我记得是,呃,然后有两个男的啊,不同国家的,他俩呢是最后呢跳的这个高度啊,积分啊全都是一样的的,呃,就他俩相当于是这个冠亚军了啊然后呢,这个呃,这个相当于裁判就问啊说你俩呢,是打算再PK一下啊,分出谁是冠军谁是亚军呢,还是说呢,你俩愿意共享这个金牌?
51:10
啊,最后呢,他俩一商量说咱们就共享金牌吧,啊就当然也会个一个人发一个,相当于他俩都是冠军啊,他俩都是冠军的话呢,呃,不影响人家下边这个亚军和这个季军,其实这哥们儿也应该挺高兴的是吧,季军应该高兴,要不的话呢,他俩要是冠亚军,这个是季军了,这这哥们就惨了哈,也没有奖牌了,那现在他俩都愿意当冠军,那相当于就不影响这个相当于人家是第一名,这也是第一名,这个是第二名,这是第三名。就类似于我们这里边儿这种方式一样的是吧。哎,这个注意一下好,那这样的话呢,咱们就把这个所谓的这个呃,序号的这个事儿呢,咱就说清楚了啊,我就过了啊,然后接下来的话呢,咱们说一下这个叫分布的函数。哎,我这块我再选中看第二步,这叫分布函数。哎,第二步,哎,我上边这个标号这个对着呢叫序号函数是吧?啊这段叫分布函数,哎,大家呢,你先来看我这个笔记也可以,那我这里边呢,把这个对应的需求呢都写清楚啊。
52:04
首先呢,我们来说一下第一个。2.1。嗯,就它啊,这个一看的话呢,就是percent rank,就是求这个比例的一个情况的。哎,求比例的一个情况,这个比例怎么去计算的呢?这块呢,有具体这个值,它减一除以它减一,这个大家可能现在也看不懂啊,这个我最初看的时候我也有点看不懂啊,哎,咱们一举例子呢,通过例子往回返去说就清楚了。好的,那这块我们把它粘过来啊,放在这儿,这是咱们这个需求啊,然后这个需求的话呢,哎,我对应的啊,我写的是两种写法。啊,我写两种写法,嗯,其实呢,要说简洁的话呢,我们其实是可以写这个写法二的,但是写法二的话呢,大家看的话呢,可能会看不太懂啊,然后呢,我就又给大家写了一个叫写法一啊,咱们先把这个写法二呢先拿过来。好,先拿过来这个写法二里边呢,大家你可能大眼一看的话呢,就先先别说这个需求啊,你这里边是不是有个window w,你就这块给你干蒙了是吧,说where这块呢,按说呢,是不是叫这个过滤条件,这过滤条件到这来说就完事了,怎么又多了个这个东西呢,这个呢结构呢,其实就可以理解成哎,上面呢,我们要用这个W了,这块呢,相当于是做了一个先声明,声明到这儿了,只不过然后上面用的话呢,直接就调用就行,这个大家你要看不懂的话啊,这个我先暂时呢给大家写成叫我这叫方式一吧。
53:22
哎,我把它呢改造一下啊,大家呢,理解起来就会更加的清楚一些。哎,我这两叫方式二怎么着呢?哎,这个as后边呢是这个结构,我把这个结构呢,我肯T出X,我放到这,哎就跟咱们前面讲那个序号类的,哎就一致了,哎大家呢,理解起来就没有什么障碍了,我做了个替换好吧,然后呢,你把这个位置呢,你就删掉就得了。嗯,这样就行好,我们看这个需求说呢,叫计算故子数据表当中名称为女装的啊,所以我们这块呢,Where这块呢,是不是只考虑这个一一的这块呢,就是女装是吧,我们就没有要二了啊说呢名称为女装的类别下的商品的叫a percent rock。
54:03
哎,他的percent rank就是它的一个比例一个问题是吧,呃,这是提到啊,这块还没提到说具体的去呃,排序啥的哈,好的,那我们这块呢,看一下什么意思啊。这里边儿我们去select这个rank。这个RA的话呢,咱们刚才不是讲过了吗?就这个吧,相当于是一个序号呗,啊,这是这个rank啊,然后over,然后它就是啊,这有排序啊,我们按照这个价格的一个降序排。按照这个价格的一个降序排,排了以后的话呢,然后我们这块呢,是不是有个标号啊,OK啊,这个呢,我们就要这个二啊,然后这个呢,是这个percent的一个rank啊,这块也是一个降距排,然后哎,针对于它我们这呢有一个这样的一个函数啊,其他这块呢,还是你其他的一个字段,这就没啥可说的了,来我们主要运行看的一个效果,它的意思是什么啊,这边的话呢,其实还可以理解成就是咱们这个表中的针对于这个category是一的啊。呃,这样的一些数据也就都摆这儿了,然后这个呢,是我们这个rank啊,这不就122,然后下边是四。
55:01
对吧,因为这俩的这个价格是一样的,这个咱们已经刚才上面讲过了这样一个序号函数了啊。然后呢,这里边我们要求这个比例啊,这个比例呢,你看00.20.2啊,0.60.81啊,最后呢,不就达到100%了是吧?哎,相当于是个累积的一个意思啊,最后就100%了,这个数怎么算的呢?哎,这块我们就需要用这个公式了。啊,Rank减一除以Rose减一,你比如我们第一条记录,你第一条记录呢,这个值是一吧,这个我别来回切换了,咱们就这样盯一下啊。啊,第一条记录的话呢,我们这个值是一一减一,那你再不管除谁了,这个结果肯定是零吧,所以你看这块就是零啊这个呢,为什么0.2呢,二减一的话是不是一啊,二减一是一,然后Rose Rose呢,是不是这个二啊,哎,二减一,嗯。Rose,哎,这个Rose是多少?总共呢,我们这块有六条记录是吧?哎,ROSE6啊,六减一是五,哎,所以呢,1/5啊,这不就0.2嘛,然后下边呢,就一次这样的去计算啊,这个还是二,所以这个也还是0.2,然后这个呢,你是四四减一是不是三呀,哎,这不就0.6嘛,哎就这样来计算的,最后呢,相当于是累积乘一啊,就相当于你理解成是100%一样。
56:06
啊,这就是这样,哎,就是越往下走的话呢,它就是累积的,这个就是大家学这个概率统计的话呢,学过这个累积函数吧,哎,就是这样一个意思啊,然后这个方式二的话呢,可以看成是方式一的一个,哎,或者方式一看到二的一个简洁的写法,因为呢,我们这块呢,你看使用的这个结构呢,是不是全都一样的呀,我就呢用一个哎window w呢来表示了,放在我们的过滤条件的一个后边。哎,用as呢,去做一个支撑啊,你这块直接就写W就行,哎就是这个意思,好的,这呢是我们说的这叫a person rank,然后这块呢,还有一个叫它啊CTRLC。这是2.2。哎,这个函数。下边也说这个函数呢,主要呢,是用于查询小于或等于某个值的一个比例啊,这块我们举例子啊,CTRLC。好,我把这个呢,CTRLC拿过来。
57:08
嗯,这么着好,这呢,我们就用了这个函数了,对吧,然后over,哎,Over呢我们就放到这了,这呢,你看我是按照这个,呃,这个叫什么price的一个升序排的啊,我按它的一个升序排的。这个呢应该理解了,就还是呢,就是考虑这个category,一的放一起,二的放一起,然后按照这price呢,内部呢是按照升序去排,然后用一下这个函数,其他呢,就是我们还是提到了几个字段来,我们选中了去做个执行。哎,这块呢没有问题,后边这块呢,就还是我们这个原有表中的这些记录数啊,诶往下走一下,上面是开数一,下面是开这个是二啊嗯,然后的话呢,我们看下这个函数,它这是这个这个这个比例这个比例,这个比例到这呢是1%啊哎,说查询这个故子当中表中小于或者等于当前价格的一个比例。啊,你比如说我们这个小于或等于嘛,是吧,诶你第一个的话呢,是29块九啊,小于或等于六,29块九的比例是这么多,然后到这儿呢,是小于或等于39块九的比例是多少呢?到这是这么多。
58:04
啊,然后呢,再依次往下推啊,然后这两个呢,为什么一样呢?因为他俩都是89嘛。对吧,哎,然后这个是一啊,因为呢,小于或等于399的三十三百九十九点九的多少呢?哎,全都比你这个不大是吧,哎,小于等于你的不就是一吗。哎,就是这个意思,呃,大家如果呢,你学过这个概率统计的话呢,相当于是我们计算这个X呢,是小于等于啊,具体某一个值,它的一个概率是多少。那就这样的一个概率函数啊。好,嗯,这块呢,我们就清楚它了啊,然后的话呢,呃,这个呢是第三波叫做前后函数。这个大家呢,现在有点意思吧。嗯,就是对于我们说的这个窗口函数,它的一个理解呀。嗯,应该是得有点感觉了啊,哎,3.1。那就这么着啊。好这块的话呢,我们还是拿一个需求呢,给大家举例子。
59:04
哎,然后呢,我们再看一下这个具体的实现啊。好,CTRLC。哎,粘过来。哎,粘过来了,诶这块的话呢,我们粘,哎这个粘过来这个可读性呢,稍微差一点啊,我往这块呢,再移动一下哈。往这移动一下,哎,这呢是整个跟我们这个小框呢,它俩是一个对应的,OK吧。好,嗯,这里边儿呢,大家可能看起来稍微有点不清楚啊,咱们先这样,我CTRLC一下,我先把这个呢先拿出来。咱先分析这个结构。这个结构好了,这个结构的话呢,大家你要分析的话呢,可能说哎又差点意思,因为这里边有个window w是吧,就是这块呢没写where呢,你可以理解成就是你可以列解成有一个where啊,就好比是呢,我写了一个啊WHERE1等于一一样啊,然后后边再写的我们这个window啊,那这个呢,可写跟没写一样,所以我们就算是去掉了,然后这块呢,整个把它呢,咱们CTRLX这个其实就不要它了。
60:09
啊,就相当于是在这个位置呢,CTRLV粘过来的。哎,就是这样一个场景。我再变小一点,哎这样一个场景好这块呢,可读性呢,目前就比较高了,咱们看一下咱们查的是这个ID啊,Category name price,哎这块多了一个这个函数,然后针对是它,然后from这个故事是吧?哎,这时候我们就要看说你这个函数呢,它到底是什么作用。啊,什么作用,哎,这我们说这个,呃,这个前一个商品跟该商品价格的一个差值,咱们这块你看它是不是表示的算是叫这个前一个商品啊。的价格,呃,针对于这个一个升序的排列的话呢,第一开始是29块九,我们第二行呢,叫39块九的时候呢,你看这个位置写的是29块九,这个呢,写的是79块多的时候,这个写的39块九,这个这么多写的79.9,你会发现呢,是不是每次后边这个值都是咱们上一个表中的这个数啊。那所以说你第一条数据它这没有了对吧?啊这个呢也是一样的道理。
61:02
整串行了吧,那先这么着是吧,然后这个人传这个,哎就这样子的,所以说这个呢,它查询到的就是你上一行的这个,哎,查询到的这个数据。哎,上一行查询到的数据,那这呢,我们就得到它了,咱们现在需求呢,让你查询出来呢,就是你当前这个商品呢,比如我们这一条记录吧,它有个价格以及呢,跟你上一个这个商品价格这个差值,那我们就需要呢,计算这个当前这个商品跟上一个商品的差值,诶咱们不是已经算出来,其实就让这两个值是不是做一个减法就可以了。哎,那这块都查出来,我们就把它呢,是不是放在这个from当中啊,我放在from当中呢,然后呢,查询这里边儿有的这几个字段,然后同时的话呢,我们再找到。这个哎,这不就找到了你当前这个价格和你前一个这个价格,然后让他来做一个减法,然后做一个新的列出现的。就是这样道理是吧,所以这个清楚以后呢,我们只是把它呢,又包了一下啊,是一个子查询就可以了啊,这个我写一个叫其中吧。啊,其中子查询。
62:00
啊。子查询。诶,录像是吧,好,那这时候呢,你把它选中一下,无外乎呢,就是我们再多了一个列,然后让这两个做了一个减法而已,哎,就是这样的一个效果。那这个呢,因为你是个no嘛,这个减去跟now做运算的话,结果还是no是吧,就可以了,行,那这呢是我们说的这个,哎,这叫什么前一行啊咱哎咱们这块呢,我写的是用的是这个一对吧,一的话呢,就是前一行呗,你要这个前的话呢,就是前一行了啊。行,然后呢,我们再看这个啊,这个呢,是当前行的后N行了。啊,就是差别啊,CTRLC。嗯,这个呢,我们是一个。几点3.2是吧。哎,转过来。嗯,好,还是看这个例子。哎,CTRLC一下。哎,张过来。
63:02
基本上大家其实也能够猜到这个意思是什么样子了哈,因为呢,你对这个前一个数据呢,清楚之后呢,我这块如果写一呢,就相当于是后一个数据呗。对吧。好,哎,这呢,我们,诶这个我我展过来,待会往前提就往后再再缩进一下啊,跟咱们上面那个其实是类似的,也是呢,我先把这个子查询呢,先拿出来。在其中。子查询为是吧,哎,咱们这样粘过来。哎,这么着。嗯,这个呢,同样的道理啊,你要不太熟悉用这个window的话呢,你就把这个呢给它替换掉。哎,就可以了,然后这个呢,我Windows就不要了。那就这样写好的,那针对这个结构呢,来我们选中了再去执行。哎,大家看啊,咱们这个呢,叫做lead啊,Price啊,还是针对这个价格的啊,我们写的是个一,那就是相当于是这个,呃,后一条数据了,然我们这块呢,是29块九,然后这个写的其实就是你下一行的这个记录啊,现在就这么着的。
64:02
这样对应的。对吧,哎,那你最后这个呢,是三三百九十九点九了,你没有了,那就是个no,诶所以他取的是下一个,我们刚才那个呢,取的是上一个,哎区别就在这儿,那这块呢,是你后一个商品价格跟当前价格的一个差值,那还是呢,跟我们上面这个思路一样,你把它呢,再放到from当中,然后让最后这两个字段呢,是不是做个减法就可以了。哎,就没问题,好,那这块我们就相当于是选中以后再执行一下,哎,多了一个这样的一个字段啊就行啊,OK,这个就过掉了啊。然后再下面呢,这个叫首尾函数。哎,这个是我们这个四啊,哎,首尾函数。哎,首尾函数呢,这块也有两个啊,这两个呢,我就给大家举一个例子吧,咱们把这一个呢就说清楚就行啊,后边这个呢,跟他这个类似。哎,这个叫first value。哎,负360,嗯,然后呢,查询这个商品的价格,这个还是一个举例啊,没有写举例啊。好,CTRLC。
65:05
哎,有时候呢,可能有点强迫症啊,像那个课件里边呢,有时候这个呃,多一个空格啊,我看着都难受,就非得要把这个空格给它去掉是吧?哎,像刚才那个少了字了,哎这个虽然意思呢很明确啊,但非得要给它加上啊。好来我们看一下啊,这里边这个情况啊,又出现这个window了啊,这个大家如果还是不清楚的,还是那意思啊,这个呢,你就把它呢,就是你把它呢,就看作是我们在这个过滤条件后边写的,那过滤条件呢,相当于是没有没有你就直接就写这个window就行,只不过我刚才放到上一行上去了,然后的话呢,咱们把这个呢,我CTRLX拿走,你前面呢,哎在哪一个,这个叫窗口函数,后边呢你去呃窗口函数呢,后边该有参数,你该有几个参数,你该写几个就写几个,对吧,写完之后的话呢,接在后边写个over over后边呢就是写我们一个小括号,小括号里边呢,就是我们这叫还partition。哎,就是类似于我们相当于原来以前写那个group那个位置一样啊。
66:02
好了,这块你看我们就学完了,这呢只是起个别名而已啊,哎哎,我们这时候呢,开选中,哎这个走起啊,现在呢,我们选中呢跑一下啊,其实这个思路呢也很清楚啊,咱们现在呢,是按照你这个category呢进行一个分组啊,分组完以后呢,你上面全是一啊,下面上面全是这个女装的,下面全是户外的啊orderba price呢是一个升序,升序完以后的话呢,诶这块我们加了一个这样的叫哎first value啊,它只是取我们这一波啊,你这个女装这一波里边呢第一个啊。所以你这块你看到全29啊,下边呢,取你这个户外里边呢,这个,诶所有的里边的第一个是不是,所以全是59啊,哎,就是这样一个思路啊,你比如说你想看跟它的这个差值是多少,你该减就减就行了。哎,就行啊,哎,像我那会儿呢,咱们一开始给大家举例子的时候呢,我说过呢,这个串口函数是介于这个单号函数和这个分组函数之间的时候,哎,当然不是说过呢,大家按照这个员工的部门一定的去排序,排进去以后呢,以后的话呢,比如说升序排是吧,呃,诶这个先是就是相同部门的先放一起啊,然后呢,这个公司呢,你在内部呢,按照这个升序去排,然后呢,诶,我们再取出这个工资,比如说当时我说的是最高的哈,哎,然后呢,看每个员工跟这个最高的一个差值。
67:14
哎,最高的就是最后一个,那最低的话是不是就第一个啊,那你就可以考虑是不是用我们这个叫收尾函数了是吧。哎,就这个意思啊,这个呢,我们是取得这个最头部的这个,然后这个last的话呢,取得就是我们是不是最尾部的这个呀。啊,最尾部的这个行啊,这个呢,我就时间关系啊,咱就把这一放,我就不具体的去列了啊大家呢,你可以看一下我这个,诶课件里边这个就行啊好,然后呢,我们再看一下这个最后一波呢,叫做其他函数。啊,这个是我们这个第五个啊,其他函数。哎,首先啊,这块我们看一个5.1啊。5.1的话呢,就要这个啊CTRLC。哎,这个其他函数的第一个呢,就是哎,它然后这块呢,我们把这个需求的话呢,我们也CTRLC一下啊给它粘过来。
68:07
哎,这样,然后呢,最最终的这个实现呢,来咱们也把它拿过来啊,CTRLC一下。哎,这个我就放在这个下边了。哎,这个就不用这个注释了啊好,这个往这转往这转啊好看一下我们这个里边的情况啊,嗯,说整个的这块呢,From它,然后这里边还出现了一个window了,对吧,那window里边呢,诶大家呢,可读性呢会差一点,还是跟咱们上面一样啊把它呢,取掉之后呢,诶凡是出现一个W地方呢,你用整个这个式子呢,咱们去做一个替换,哎就可以了,然后这块呢,我们就不要它了。哎,是这意思是吧,哎,这个稍微有点长啊,我从这块呢,给大换下行吧。哎,这样的可读性呢,会更好一点,哎,咱看一看这个呢,主要是查什么的。哎,主要查什么的啊,嗯,这块呢,说查询这个估值表当中排名第三和第四的这个价格信息。嗯,我这写的23,嗯,这个这个写的不准确了啊,这是二三啊,我把这个呢改一下。
69:01
二跟三啊,查询这个叫二三的这个,呃,商品信息啊,你看这块呢,我们选中了,走起,哎出来了。就是目前的话呢,你看还是按照我们这个price的一个升序去排的,对吧?诶这是升序排,这个也是升序排,然后的话呢,后边增加了两个字段,那显示的话呢,就是你这一波数据里边呢,排名第二第三的啊排名第二第三的话呢,你对于呃,咱们比如第一条数据你过来之后呢,你这个无所谓,呃第二第三,因为只有一条嘛,是吧?哎,有两条的时候呢,它是不是就是我们说的这个,呃,第二条了,那第三条还不知道呢,哎,有了第三个的话呢,是不是就第二条,第三条出来了,那在后边是不是就这个。哎,下边一样的道理。一样的道理,哎,下面你看这块啊,399的话呢,诶,因为因为有俩399的,所以呢,哎,他就充当了第二还有第三啊,所以你看这块呢,他就直接就都写上了。哎,这就我们查询第二第三的这个价格信息比较清楚。啊行啊好这呢,我们就来说到这,这是它的这个第一个,然后我们看这个第二个啊。
70:03
哎,5.2啊。嗯。这个的话呢,我们也是啊,有一个具体的这样的一个,呃,举例啊,一个案例来我们这块呢,把这个需求呢拿过来。啊,CTRLC。哎,粘过来啊好,我们这样一下,好大家看,嗯,这个呢,还是出现这个window了,还是一样的的啊,大家把整个这个呢,我们CTRLX拿走,然后在这呢做一个替换啊,这块呢我们就给它去掉啊,当然大家写的话呢,你可以呢用这种写法,你可以先写成这样,以后呢,你后边呢再写个window w,然后呢,再把这个呢,我们给它放过去啊,可以这样去理解。上来呢,我就写了这样的一个,呃,窗口函数over啊这个over它嗯还是按照这个来排序这个分组的,相当于然后呢是价格的一个升序排,哎,这呢是起了个别名,哎就这么着啊这个是干什么呢?我是对整个这个商品的这个按照价格呢,哎进行了一个分组,诶分组我这写的是三组啊,咱们整个呢是上边这一波呢是有六个是吧?哎,下边这一波的话呢,也有六个,分成三组呢,你看就是看一下占就一个数值占俩。
71:09
看一个竖值占着这样一个啊,有同学可能会想说,那要分成四组呢。四组是吧,哎,分成四组会是什么样呢?那就成这样了哈,这个四组的话呢,我们就是哎就这样,那这个三跟四这样就分开了。啊,就相当于他俩呢,因为就没有再配对的了嘛,所以这块呢,就是三跟四各一个,分成五组呢。哎,首先呢,我们这个数据量很小,就没有这样去分法了,但这样你非要说分的话呢,就是呃,至少得先有个12345,然后呢,你多了一个,多了一个呢,就是给前面这个一呢,就是多占。分四的话呢,相当也是1234,然后呢,是不是,哎上面这俩呢,就是分到了俩是吧,哎,就这个意思啊好这个呢,就我们说的这样的一个函数啊,整个呢,咱们关于常见的这个,呃,窗口函数里边这些呢,咱就都给大家呢,相当于是做了一个讲解。哎,就从我们哎这块来看啊,哎,都给大家做这个讲解啊,应该呢,通过我刚才这个讲解呢,大家应该是有一些感觉了啊,我们再来看这里边这个小结,说窗口函数的特点呢,首先呢,它是可以分组的,而且呢,可以在分组内呢进行一个排序啊,能排序的前提呢,是因为人家分组以后没有合并嘛,啊大家放一起之后呢,还是一条是一条,所以呢,你可以做一个排序了,另外呢,窗口函数不会因为分组而减少元表中的行数啊,咱们这里边你看查了吧,查了好久了,是不是原表一共有12条记录,咱们始终呢,都还是12条记录的,对吧。
72:26
哎,这时候呢,我们就可以在原表数据的基础上呢,做一些统计和排序的一些工作,哎,非常有用,哎,大家呢应该比较有感觉,下来呢,自己也可以呢,你像我一样跑一下感受感受啊,也可以自己呢试着去写一写啊,因为呢很多在工程当中没有用到8.0,咱们呢就尽量不花太多时间呢,给大家呢去一个一的去献血了,咱们就跑起来来运行一下,大家能知道这个新特性。啊,出去的话呢,给别人说说知道窗口函数嘛,老牛了啊,哎,我给你讲讲是吧,哎,至少能当成是一个。叫什么炫耀的一个小知识点了,好,那么关于我们的窗口函数啊,咱们就说到这儿。
我来说两句