00:00
接着啊,咱们来看一下这个第八章叫做聚合函数,第八章和第七章啊,都属于我们MYSQL提供的内置函数啊,咱们在这个第七章当中提到过这个函数的这个分类啊,这块分类的话呢,我呢是按照这个哎操作的这个行数呢来进行区分的,我们分成了叫做单行函数和多行函数,对吧?那这里的多行函数,那实际上就咱们下一章要讲的聚合函数,好来我们看一看这个聚合函数。啊,聚合函数是吧,聚合函数呢,我们也称为呢,叫做聚集函数,或者呢叫做分组函数,它是对一组数据进行汇总的函数,啊,输入的是一组数据的集合,输出呢是单个值。有同学说呢,能不能输出多个值呢,即使输出多个值呢,你多个值也得作为一个这个对象出现啊,或者我们叫一个变量出现,你这个变量呢,可能是一个集合的这种变量,这个这个数学当中跟我们现在呢,学习的这种编程,编程语言啊,它其实都是一致的,什么意思啊,你看我们这个X啊,咱可以写成一个大写的X,代表的就是一个向量,向量的话呢,你里边可以包含X1 x2,一直到一个XN,也就是说呢,我们这个自变量啊,你可以有多一个多个,但是这个因变量呢,只能得出来一个结果。
01:18
啊,只能有一个结果的,那我们这里边儿这个具有函数呢,就是你可以进去多条记录,但是出来的呢,注意一定只能有一条记录,这个大家一定要死守啊这个结论啊,这个函数,数学中的函数和我们编程语言中的函数呢,返回的都一定是一个结果的啊,这个大家注意一下。好,那么首先的话呢,我们说什么叫聚域函数啊,它呢是作用于一组数据,然后对一组数据呢,这个计算之后呢,返回一个值,比如说呢,我们这呢,有一个诉求说呢,这个表当中,这个employees表中工资最大的值是多少,那么此时呢,咱们是不是就得把公司当中107个员工啊,每一个员工的salary都得放到我们这样的一个函数当中,然后呢,诶出来之后呢,就得到一个最大值。
02:03
在里边呢,就相当于是进行一个一个的数值的比较,看看谁是最大的对吧,返回的只有一个值啊,这个大家注意一下行,那么基于这个诉求的话呢,我们下边呢,先去谈一谈咱们在MYSQL当中常用的聚合函数呢,有哪些,注意你看我这里边用的词叫常用的是吧,那杨呢,就是我这里边列的呢,不全。啊,这个聚合函数呢,实际上可以有很多的啊,因为在数学层面呢,有很多类似于这样的函数,OK啊好了,那咱们这个开始来讲解咱们这一章这呢一个井号下去,咱们是第第八章吧。哎,叫聚合函数。好,然后呢,我们把这个呢,诶CTRLCCTRLS,咱们先做一个保存。啊CTRLV啊啊保存一下好,这个呢,我们叫这个聚合函数,那首先的话呢,哎,或者这样说吧,咱们这一章的话呢,其实结构呢比较清晰,分成这样的几个事儿呢,给大家呢去做讲解,那第一个事儿的话呢,就是我们常见的几个聚合函数。
03:06
啊,这是我们说的第一个事儿,然后第二个事儿的话呢,这个聚优函数,那我们还可以呢,让他这个,诶针对于咱们比如说这个员工表吧,我们可以把整个表呢看成是一个组,然后呢,诶跟这个具体的这个聚合函数呢去使用,那也可以呢,把它分成好几个组,那怎么分组啊,这里边就涉及到我们有一一个这个关键字叫做格如和BY的使用。它的一个使用。这呢就是咱们这一章呢,要讲的算是这个第二个事儿,然后这一章呢,要讲的第三个事儿的话呢,这提到这个叫哎having关键字的使用。它的使用呢,实际上也是起到了一个叫过滤数据的一个作用,前面呢,我们讲到这个where可以过滤数据对吧,那为什么还要讲个having呢,咱们到时候再说,然后这一章呢,我们第四个事儿,咱们来谈一谈这个circle的一个底层的执行原理。执行原理这个呢,就稍微有点这个高大上的这个意思了,对吧?好,那这呢,就是我们这一章呢,要给大家讲的这样的几个问题,好,那首先呢,咱们聚集到第一个问题上,说常见的几个聚合函数都有哪些,咱们呢分拨来给大家做介绍,那首当其冲的话呢,我们先给大家介绍呢,就是这个里边提到了叫avg,还有呢,哎,我们这个叫sum是吧?哎,这是咱们的第一波,然后这个第二波呢,我们给大家介绍呢,是这个max,就是求最大值,Min呢是不是求最小值啊,然后呢,A1.3呢,我们再给大家求,哎这个介绍一下,这个叫count的一个使用。
04:33
这呢就是我们想给大家介绍的几个聚合函数,那大家呢,首先我们要明确一个问题,这呢只是说叫常见的几个聚合函数啊,没说就只有这三个,你比如说像咱们这个,那数学当中呢,去使用啊,比如说这个求什么呀,求这个方差。方差、标准差。标准差是不是还有呢,求这个,比如说中位数,诶像这些的话呢,是不是也算是这个叫聚合函数啊。
05:01
哎,你想。啊,这个咱们上边这五个还没讲呢,咱们先聊一聊,这个没有见过的是吧?啊这个呢,咱们这个开发中呢,也比较少去使用啊,简单的相当于唠两句方差呢,开根号以后呢,是不是就称为叫标准差对吧?那这个呢,它俩的作用是一样的,来衡量就是这个数据的一个稳定性,那这个大家如果中学这个数据还有点印象的话呢,应该知道我这边在说什么啊这个比如说有两个运动员,一个叫A啊,一个叫B,那这呢,我们说只能选一个去参加这个奥运会。啊,前提是这两个,比如说我们就明确了啊,只能是有一个去了,他俩都有这个资格,国家队说了算,说我让谁去谁就去是吧,那么这里边儿我们应该选谁去呢?我们参照的指标是什么呢?先看一下他们往届的这个历史数据,看看谁的这个平均成绩呢比较高一些。这里边呢,涉及到是不是就有这个平均的一个情况,比如说他们俩,他们俩是这个跳远运动员吧,那就看平均的话呢,比如这一年的数据当中,谁跳的会会更远一些,那如果明显的A比B好,那我们就选A了,那如果呢,你发现这个A跟B呢,他俩这个成绩呢,基本上是差不太多的,那此时的话呢,我们就要考虑这个方差和标准差了,看他俩谁跳的更稳定一些,对吧?呃,发挥你得稳定才可以,那比如说呢,像这个A呢,这个诶这样假设他们的这个平均值呢,就是这一条线,然后呢,A呢,它的一些数据呢,是是这个样子的。
06:21
是这样子的,平均值的话呢,就在我们这条线上,那B这个人的话呢,我换个颜色啊,这个大起大落是吧?呃,有可能发挥的特别好,也有可能发挥的特别差,那此时的话呢,我们如果用这个方差和标准化标准差去衡量A和B的话呢,明显这个B的这个方差或者是标准差呢,就比较大一些。哎,这个数据越稳定,比如到极限的话呢,就是假设这个A的话呢,它每次都是这个平均值的这个数,就每次跳都是这个值,那它的方差标准差是不是就是零啊,因为我们衡量的是你这个具体每一次成绩距离,咱们这个哎平均值它的一个距离的一个平方和是吧?平方和呢就是方差,然后一开根号呢,就是标准差,那你要是这个距离的越不平稳的话呢,这个距离的平方和是不是就越来越大呀,加一起这个值就比较大,OK。
07:09
啊,那这呢,我们是说衡量这个稳定性的啊,那这个中位数的话呢,也是来计算一下这个,呃,一个场景当中,比如我们这里边儿呢,有很多的这个数据。啊,很多的数据,就好比是一个社区或者一个国家啊,一个省份也是一样,那么这一拨人,比如说咱们计算北京市人口的平均薪资有多少。平均薪资有多少,或者叫我们衡量一下北京市人口的这个就是正常的生活水平怎么样是吧,那这时候在这指标呢,一方面我们可以取这个平均值,另外呢,还可以取这个叫中位数,那这两个值的话呢,它在一些场景下呢,会有一些区别啊,举个例子啊,你比如说咱们说个比较极端的假设呢,现在有五个人,这四个人呢,这个平均工资呢,都比较低,然后有一个人的平均工资呢特别高。啊不,我说说错了,不能叫平均工资啊,这四个人的话呢,每个人的个人的这个月工资啊,都比较低,假设呢,就只有1000块钱。
08:02
那么有一个人呢,特别高,他一个月呢,他挣10万块钱。10万块钱对吧?好,那么如果呢,你要是拿这个平均数去衡量,说这五个人的平均工资有多少啊,那你是不是就是这加一起就是4000,然后呢,就是104000了,应该一取平均,那这几个哥们儿的话,平均工资都挺高的是吧?那就成这样了,那如果我们要是这个中位数去衡量的话呢,那就取啊,我们找到一个位置,这个位置左边呢,它的概率占50%,右边的概率呢,占50%,那我们要这样取的话呢,相当于这五个人他们的中位数呢,是不是就是1000呀。那1000呢,就作为我们这呃这一波人,他的一个衡量的一个基本情况了。那么放眼到我们整个这个社区,或者这个省份,这个城市,这个国家的话呢,如果你要是用这个平均数和中位数呢,有可能差别会比较大,那就在于这里边儿是不是有一些这个叫我们叫奇异点了啊,如果说一个国家这个贫富差距非常大的话呢?啊,你比如说大部分人都很穷,然后只有一些这个人特别富,那你要用这个平均值,是不是就不太适合衡量我们这个社会的一个平均情况了。
09:10
哎,是这样一个情况啊,经常呢,我们讲这个是不是存在这种叫二八原则,这个20%的人呢,掌握着社会80%的财富,那事实上来看的话呢,这个还说的有点柔和,那甚至呢,不足10%的人啊,掌握着实际上可能超过80%的这个资源。啊,这个是有这样的一个趋势的,比如说像美国现在的华尔街,那基本上控制了整个的美国是吧,那华尔街呢,又号称呢,有那么一小波的犹太人控制了整个华尔街啊,类似于这样的场景啊,最后你一算呢,就那么一小撮人控制了美国的这个大部分的这个经济命脉是吧?啊那你这时候呢,要去衡量说这个国家的人的一个平均这个水平水平的话呢,你要用这个avg呢,显然就不太合适啊,因为你看疫情一出现,你也看到美国有好多普通人的话呢,他根本这个吃饭都吃不上了,就断粮了是吧?哎,你要用中位数来衡量的话呢,这个可能会更精准一些。
10:01
好,那么拉回来这里边呢,我想给大家强调,就是咱们这个聚合函数,就是你放进多个数据求出来一个结果,它是有很多的,只不过呢,在咱们这个SQ这个角度来讲,咱们使用这五个呢,较多而已,是吧,诶较多而已,所以呢,诶这个呢,大家先明确咱们这样的一个概念啊,咱们只讲这五个。好,那这五个的话呢,咱们就按照这个顺序呢,来给大家去说明,大家呢,一看到咱们这个函数的名字啊,基本上大家心里边儿也都踏实了啊,也都有底了是吧?Avg呢是不是叫average啊,就是平均值的意思,Sum呢就是求总和的意思。没有毛病是吧,好,那我们这里边呢,可以直接呢来上咱们这个例子了,好我这里边呢,做一个select啊select什么呢,这个avg,那咱们把这个salary呢放进去。哎,From。Employees,哎,这个呢,大家是不是也能够明显的知道我们这个诉求是什么是吧,我们是不是想查询一下这个员工表当中的这个平均工资有多少啊?
11:02
好,平均工资查出来了,6461,相当于呢,咱们107个人啊,每个月呢,相当于平均给每个人发呢,是6000多块钱啊,就是这个ABG的一个意思,那我们呢,求这个sum呢。Salary相当于是不是一个月呢,需要支付这个员工的这个钱数是吧?哎,那是不是就是这个数啊。呃,691406是吧,那大家呢,应该也大体上应该能知道,就是咱们这个这个avg。你看avg这个salary这呢,是不是每个人的,咱们一共是不是咱自己知道啊,有107个人,那这样呢,乘一起的话呢,其实相当于是不是就是我们这个总工资了。对吧,哎,就这个意思好,这个呢,是咱们说的这两个函数的这个意思啊,然后下一个问题呢,想强调的点就是,但是你看我们这里边呢,就要求总和,那我问一下,诶,你说我这里边能随便的去放一些字段吗?比如说诶last name。Now from这个employees。
12:00
这个可以吗?有同学觉得说这个好像有点说不过去啊啊,相当于我们在求这个,哎,公司当中每个员工的性的一个总和字符串,求总和字符串,咱们你像ABC加上这个哈,你说这等于多少啊,这不有点扯吗?那字符串之间根根本就不能做这个求和的运算,所以说呢,我们这个呢,字符串要是求这个总和的话呢,是不是就没有意义啊。对吧,这就没有意义是吧,你看在我们这个MYSQL当中,它这块给我们出来的是一个零对吧?好,那CTRLC一下,咱们顺便呢,看一下我在这个,诶在咱们这个Oracle当中啊,Tables是不是还是我们这些表吗?或CTRLV粘过来来选中执行这块呢,叫无效的数字。哎,在两块五角数字了。他没有给我指明是吧,哎,这里边儿呢,相当于就是咱们这个运算呢,它也是不合理的。啊,他这块不是说像咱们这个MYSQL里边呢,直接给我们出结果了,在Oracle当中相当于直接呢就给报错了啊这呢是他们二者的一个区别啊,这个注意一下。
13:09
所以呢,咱们在这个MYSQL的时候呢,我讲过啊,就是即使呢,大家去运行没有报错出来个结果,这个结果呢,你也要看清楚,不一定对啊OK。好,那这呢,我们说表说白了就是说你这个sum呢,应用于字符串呢,是不合理的,那它要不合理的话呢,呃,咱们再来,呃或者你这样想,呃总和不合理呢,你这个呃avg这个lastname是不是也有点扯。啊,求一下大家这个姓名的一个平均值,那那那那太扯了是吧,那同样的我们再求一下,比如说叫hair data。是吧,还data的一个总和是多少啊,大家这个雇佣的时间的总和是多少,这是不是也没有意义啊。啊,也是没有意义的啊,虽然你看他出一个结果这个答案你就别想了,没有意义,好,那通过这个呢,我们想给大家强调的点注意一下啊,这个我们说如下的这个操作是没有意义的。行,那么这两个函数的话呢,具体的意思啊,一目了然,那这块呢,我主要想给大家强调的就是这两个函数呢,我们说呢,它是指啊适用于。
14:10
数值类型的。哎,这个字段是吧,我们叫这个变量。哎,才可以。那我们针对数值类型的求总和,那只有数值型的我们才可以做这个加减加法是吧?然后呢,总和求出来之后呢,你再求一下这个除一,这个个数呢就是平均,OK,这个呢,就咱们想强调的这个avg和sum,好这个就过了,然后呢,下边我们来看一下这个叫max和min啊,Max呢就是最大,Min呢就是最小,那这个很清楚了,那我们比如说咱们select一下,比如说max salary是吧,A from employees。想查询一下我们这个员工表当中啊,这个是不是最高工资是多少呀。来一走啊,两万四啊,实际上这是公司那个老大是吧?啊,一个月挣24000,那公司的最小的工资是多少呢?哎,再来一个这个salary。
15:03
好,选中以后我们一直行最低的是两千一啊,你看这个差别还是挺大的,那这个员工的话呢,他要是工作一年的这个,这个挣的钱是不是才跟我们这公司老大呢,是才挣的一样是吧?哎,这个在这个别说美国了,在在中国也是一样的。世界各地都一样是吧,这个我记得是哪一位这个哲学家说一句话啊,说的人跟人之间的差别啊,你看虽然都是人一个物种对吧,但是人跟人之间的差别呢,甚至呢,是跨越了物种之间的差别。啊,你想我们对于除除了人之外的物种啊,物种跟物种呢,是之间差别,竟然还比不上人跟人之间的差别啊,差别是可以很大的。啊,这一方面呢,我们可以拿这个财富去衡量是吧?啊另外呢,其实还可以拿这个叫认知能力来去衡量啊,尤其像这些年呢,越来越感受到的一个词儿,叫做这个认知啊,有的时候呢,我们看到一些比我们认知能力高的一些人呢,你都不知道他天天在干什么,然后他好像就也很能挣钱,当然前提是这个正当手段,那比如说比我们认知低的一些呢,比如说就像以前这个老农民啊,他能够他的认知里边就是我要辛苦的去耕地,然后呢,我去把这个粮食要卖了,我想着办法呢,我这个多勤劳一点去耕地,然后呢,让这个粮食呢多产几十斤,那在我们来看的话呢,就是呃,你付出了这么多,收获呢,却非常有限,那比如我们做这个软件开发,你稍微的多去这个努力一下啊,多去加加班是吧,多整一些新技术,半年以后呢,你薪资可以涨挺多的,那我们觉得比这个老农民呢,要靠谱很多,那是因为我们在自己的认知里边,我们呢,可能就是哎,对于下层的一些认知能力的人呢,可以降为打击,那同样的上层呢,也可以降为打击我们。
16:39
那咱们能做的事儿呢,就是大家在学习之余是吧,不断的提升你的这个认知能力啊,让你能够看到更广阔的这个一片这个领域啊。好,这个咱们再拉回来,行,那么这个select的这个max和min呢,这个顾名思义一个球最大啊,一个球最小,本身的意思比较简单,好我接再接着呢,说这个第二个问题,那我们上面呢,提到这个max,这个avg和这个sum的时候呢,说不适用于这个字符串类型和我们的这个日期类型,那么大家你看一下咱们这个max和min。
17:10
比如我这里边儿写一个叫lastname。来from一下这个employees是吧?姓名的最大值。有意义吗?有同学可能想说这没有意义吧,姓名最大值,这这这是啥意思?哎,但你注意哈,哎,注意你看我来解释了,合情又合理的,咱们说这个字符串啊,跟字符串之间做加法是没有意义的,所以说呢,它不能存在总和,对吧?那么我问一个问题,字符串跟字符串不能做加法,那么它们能比较大小吗?能说这个字符串大于这个字符串吗?他说这不能吧。不能吗?再想想咱们前边你做过什么需求啊?啊,咱们是不是order by过,诶这个给个哦啊order by什么呀,Last nameme你是不是按照姓名排过序呀。你既然都按姓名排过序,那说明能够比较大小,你才能够排序的对吧?说大家呢,来排个队,按照这个身高的这个高低是吧?大家排个队按照这个姓名是吧?去排姓名打排啊,啊abcd顺序啊,这是不是就给了一种规则对吧?所以order by呢,我们按照字符串呢排过序,既然能排序就能够比较大小,包括呢,咱们说到了,咱们默认的是不是用的这个UTF8是吧?那对应的这个比较规则呢,是不是也是UF8那样的一个比较规则,既然有比较规则了,那不就能比较大小。
18:30
能比较大小,那是不是就有大小之说呀,哎,没有问题,好,所以说我们这个,哎。Max last name,它是有意义的,来我们选中执行,实际上呢,就是你这个字母相当于比较大的这个是吧。那对应的话呢,我们来个mean last name。是不是也就没有问题了?啊也没有问题,好选中执行一下就出来了,那相当于呢,就是咱们在order by这个按照这个last去排序的时候呢,你是一个升序的的话呢,是不是第一个位置就是这个mean,然后最后一个位置就是这个max是吧?诶OK啊行,然后这呢就说清楚它了,那这个要清楚以后呢,自然而然的,如果这块呢,我写个hair data啊写个mean hair data,这个大家清楚吧,是不是也是可以的呀。
19:11
因为呢,日期更能排序了呀。是吧,哎,或者叫更容易理解啊,我不能说叫更能排序了,本身都能排序,就是更容易理解了,因为你也可以按照日期呢这个先后顺序呢,去这个排列嘛,既能排列一定能够比较大小,OK好,那关于这个命和max呢,我这块呢,想说的是就是它呢,诶他们二者啊是适用于那叫数值类型,字符串类型,还有这个日期。啊,时间啊类型的这个字段或者是变量。那么关于数值类型,字符串类型和日期类型,这儿呢,是咱们在数据库啊表当中是最为重要的三种类型。最为重要的三种类型。那咱们后边呢,在哪块去具体来展开来讲解啊,呃,一方面呢,咱们在创建和管理表的时候呢,这个会给大家说一下这个数字类型,常见的是什么类型,字串类型,这个还有我们说的这个日期时间类型,对吧?哎,到时候会讲,然后这块呢,我们讲的话呢,还没有放开的去讲,咱们呢先把这个常用的呢给大家讲解一下,然后这个关于咱们数据库当中这个这个类型啊,其实上是非常丰富的,我呢专门列了一张叫做第12章,咱们先把这个增删改查呀,这个创建管理表啊,DCL啊这些咱们先搞定,然后呢,咱们专门的看一看这个MYQ中的这个丰富的数据类型啊,包括里边的一些细节的讲究有哪些。
20:36
哎,这个咱们放到第12档当中去讲啊,我觉得呢是更合理一些的啊,好,那么我们再拉回来。那么关于max和me呢?清楚了吧?好清楚了,咱就过了啊好下一个这个呢叫count count的话呢,一看这个名字呢,就顾名思义,是不是就求个数啊。哎,它的这个作用。关于这哥们呢,咱们稍微的多说几句啊,他呢,有的人说这不挺简单吗?多说啥呀,哎,你觉得挺简单,我跟你讲完之后的话呢,你会发现里边还是有挺多事儿的啊。
21:07
啊,我们相当于结合这个count呢,对上面这几个呢,会有更深入的一个理解啊,你看看是不是这样子的,首先第一个我们先明确它的一个作用啊老师你为什么上面几个不写就他写呢,因为上面几个一看就明白,这个呢,大家有可能懵。所以呢,我特意的把它写出来,所以呢就是计算指定啊字段中啊指定这个字段。啊,在这个查询结果中。出现的。结果中啊。出现的这个个数。哎,挺明确的是吧,好来咱们去先演示一下,我select一下这个count,呃,指定的字段,比如说咱们写一个先写个这个吧,Employee,然后from一下啊employees。没问题是吧,好选中以后呢,我们做一个执行,你看结果107能理解吧。
22:01
说呢,你在整个这个表当中,咱们也没有写where啊,就是所有的这个表数据都有了,在这个表当中你有多少个出现有多少个行是吧,出现了这个employee ID了呢?哎,咱们有107行数据,所以结果呢,就是107这个OK吧。对,非常确定啊,没有问题,好,这个没有问题的话,我再来一个count'一个salary。看那个salary是吧,好,我们此时选中再执行啊,大家会发现呢,结果是不是还是107啊。还是107能理解吧,就是有多少行这个数据呢,它是有这个salary的是吧?哎,这个一行一行的salary,嗯,那么我问一下跟咱们具体这个salary,你比如说这个员工呢,是2000块钱。然后这个员工呢,是3000块钱,跟这个两千三千这个数值是多少有关系吗。是不是没有关系啊,咱们计算的是不是个数是吧,你有一个就算一个,有一个就算一个,至于说你这个数是四千三千五千没关系。
23:00
对吧,没关系,咱就算人头的。啊,就是说这个屋里边有多少人呢?啊,你不能专挑这个男的,专挑女的,或者专挑长得漂亮的,那不行是吧?有一个算一个,具体呢,它是什么特征的不用管,只看有没有,哎,注意这个点,那言外之意呢,就是你看啊,我这要写个count,我来个二乘以salary。二乘以salary,你看这时候结果是不是还应该是1078?还应该是107。能理解是吧,好,这个要清楚啊,这个要清楚。行,那么这个如果要是清楚的话呢,诶大家你看一下我们,我写个count谁呀,我写一个count。看一清楚吗。人家说,诶,这是什么鬼啊。哎,相当于我现在我写了一个这个字段是吧,这个字段呢,哎,咱相当于是个常量了,它不在我们这个表中以某一个这个列的方式呢去出现的,那么这个结果哎是多少呢?哎你会发现呢,是不是也是107啊。
24:01
这个大家能清楚吗?我估计呢,此时呢,有些同学呢,就整不动了是吧,整不动了我们来解释一下。来解释一下,起来from employees来,我们跑一下这块呢,是我们就查出来这个表中的数据了,对吧。好,标中数据呢,我们查出来了,然后呢,我们来解释一下我们这个count employee ID,咱们说了这个本身这个查询语句呢,自带的一个循环是吧了,那我们呢,想查询的是这个字段它的一个个数,那第一个字段1100,那这时候我们是不是算一个一算一条数据是吧,然后第二条数据呢,是101,是不是也算一条,一直往下走完之后呢,是不是有107个呀,所以我们这是107。哎,后边这个也同样道理,那我们,诶这个写一个一是怎么理解呢?相当于呢,我们接着来走第一条数据,只不过此时呢,咱们没有取具体的是哪一个字段了,而是拿一个一来表示的。那相当于是不是就一个一呀,那你走第二条数据呢,是不是又一个一呀,这就相当于两个一了啊,一直走走走是不是有107个一呀。
25:06
这个一只不过没有说具体是哪个字段了,相当于你可以理解成把整个这一条数据拿一个一呢这个数值去充当的。就跟说呢,说咱们这屋有多少个人呢?哎,有同学说,那我就数下人头啊,数人头你就真的是去数人的头的啊,你可以看成是这一条数据的某一个,呃,人的某一部分了,你就看有几个头是吧,也说我数这个,呃头数头,头是单独的数眼睛,眼睛不行,眼睛是两份的啊,数鼻子吧,你说我数鼻子,我看有多少个鼻子。啊,那也可以,你这个头呢,你可以理解成是employd,鼻子呢可以理解成是这个salary是吧,那有同学说,那我就每个人呢,就算一个一啊看有多少个一。哎,是不是也可以啊。哎,就这样来理解好,那这个COUNT1要是能理解的话呢,你看我写个COUNT2呢。那这个结果呢?会是107乘以二吗?是不是也是107呀。
26:01
他的情况是不是类似于我们这个是吧?啊类似于这个,你看这呢,相当于是我们这个表中啊,如果你数一条记录,我们相当于不是拿一来充当了,而是拿二来充当,现在有一个二了,那第二条记录呢,是不是又来了一个二啊,第三条记录又来个二,一共呢,一看哦,有107个二。所以呢,哎,这时候我们的这个查询的这个结果呢,就仍然是这个107。107。OK吧,哎,注意啊行,那要是一跟二就行了,那我们这个再再写一个谁啊,你看大家注意我们这个拉的星这个位置呢,是不是就写一个一个的字段,那我呃写看星行不行。写看得清行不行?来走一下,你看是不是也可以呀。是不是也可以是吧?好,那这时候呢,咱们就相当于说清楚了,如果啊,就先明确一下这个事儿是吧,知道我们这个抗的一个作用啊,然后的话呢,我们说如果要是计算这个表中有多少条记录,那么该怎么做呢?哎,如果计算表中有多少条记录?
27:03
啊,如何实现。啊,如何实现。哎,这样是吧,那大家能看到了,是不是我们上边呢讲到了,这算是几种方式啊。哎,这几种方式不是就算一种吗?哎,其实我们细分的话呢,可以看成这样的几种,那可以理解成叫方式一,方式一呢,咱们怎么写的,哎,我可以就就我这是,呃,从总结的角度来说了啊,不一定按照这个顺序了,第一种方式呢,我们直接就写个count清。这是一种方式对吧,然后第二种方式。这个方式二呢,我写一个count什么呀,就具体的一个常数,我就直接就用count一来表示了啊,没有必要我们可以写COUNT2了啊,就写COUNT1,这是一种是吧,然后第三种方式。这个方式三的话呢,哎,你看我们是不是也写了具体的一个具体字段啊。那是不是这样子来处理的,那具体一个字段,比如说我们写个employd啊,写个salary就行是吧,好,那么是不是有这样的三种方式呢。
28:04
哎,注意这里边儿的方式一和方式二没有问题,这个方式三的话呢,我们说它是。不一定对的。不一定对。啊,研2G呢,就是你这个既然说不一定对了,那这它就不能确定是对,既然不能确定对,那就不要用,你就说为啥呀,这不挺好吗?这不也是107吗?哎,那这呢,我们就引入下一个问题。引入下个问题,就是你看我这里说计算指定的字段在查询结果当中出现的个数,哎,这里边呢,实际上我们还要补充一个点,这个点的话呢,就是我们下边要说的这个点,好大家看或者写个二。这个select来我们这个表中啊,是不是有一个特殊的字段叫做commission p对吧。From employees。诶,这个大家你看我们这个字段呢,我求一下这个个数,那有同学说这不也是107吗?很遗憾,你看结果呢,不是。
29:02
那么这个35是什么呢?35是他我们select,哎,Commission p,然后呢,From,那employees,然后where一下commission PPT的is not not。这个commission PPT不是now的数据呢,你看有35条,那这个情况就很明显了,就是我们查询的这个字段,求它这个个数,这个个数里边呢,你注意它是不包含空值的。啊,这个我们特别呢,要说明一下这个注意这个这个计算啊,这个指定。啊四段啊,这个出现的这个哎个数时,注意是不计算这个啊,计算这个空值的,我们就写个这个not值的。相当于呢,我们说诶这个表里边有多少commission PPT啊,那有一个算一个,这个时候有一个呢,前提是你不能是no,只要你不是no的情况下呢,你至于你是0.1啊还是0.2啊,这是无所谓的。
30:03
就是咱们刚才那会儿说说salary是2000还是3000,有有有有区别吗?没区别,在求个数方面没区别,你要求总和那就有区别了是吧,但是呢,你前提是你不能是no,你要是闹的话呢,那我就不算了。所以这里边计算在查询机构中出现的个数,我们这里边呢,加括号啊是不包含,我在这里强调一下这个not值的。哎,就是这样一个道理,那既然呢,它不包含这个not值,所以说呢,我们要用这个count,具体字段呢,这个呢就不确定了。啊,你比如说咱们这个表中,每一个员工都有员工ID,都有薪资,所以说呢,这个结果呢,还是107,但是如果你要是一不小心用了这个字段了,或者呢,用咱们那个department ID。啊,因为咱知道有个哥们是不是就没有部门啊,哎,你想计算一下有多少个员工,是不是也是不准确的了吧。哎,也是不准确的了。哎,所以说呢,咱们说呢,首先这个呢,就不一定对了啊,这个不一定对了,那什么时候能对呢,就是你这个字段呢,值全是非空的时候。
31:06
那是不是才可以用是吧,哎,才可以用。行,这个呢,关于count呀,诶咱们这块呢,就多说了几句啊,多说了几句好,那这个呢,是这个第二个点,然后呢,我们诶再来啊再来是吧,我说第三个点。第三点说什么呢,这个count呢叫个数是吧,然后大家这时候你看一下这个问题,我呢select一下叫avg的salary。这是不是叫平均工资啊,好。那么我们呢,是不是刚才也计算过这个叫总公子啊?总工资和平均工资是不是就相当于是总工资呢?我们那会儿呢,直接写除了一下这个107,那107呢,咱们不能写到这儿,你给写死了不太合适是吧,那怎么办呢?我们这个位置呢,我就写一个count salary,诶这个呢可以吧。Can't salary,那么问一下这个我们计算结果这俩数是不是应该是一样的吧?
32:04
没问题是吧,哎,就相当于我们这时候工资的话呢,这不就是这个总工资除以这个salary,此时的话,因为salary呢,它的所有的值都是非空的嘛,所以此时呢,咱们看到相当于是不是avg这个诶字段呢,是不是就等于这个sum呢,去除以这个count,这是没有问题的是吧?好,那么这个清楚以后呢,接着再来啊,我呢avg来,你怕什么我们就来什么。PD。Avg commission p,然后呢?Commission p。哎,这么着是吧,然后再除以I account a commission p。这哥俩一样吗?这跟俩算出来值一样吗?或者我这会我再来一个,再来一个,再来一个啥呢?Some commission PPT让他呢去除以107,我这呢,写死了一个字段。此时呢,就问一个两个三个,这呢是三个值,这三个值里边有没有相等的,谁跟谁相等?
33:06
啊,这个问题。啊,大家呢,你可以看到这儿的话呢,你把这个视频呢,稍微的稍微的暂停一下。你捋一下。啊,看看。正说呢,这个老师啊,我好像捋不了。啊,哎,这个捋不了的话呢,其实是对的啊,为啥呢?呃,因为这块呢,其实我们,哎基于现有讲的值的话呢,你可能不清楚这个sum在计算这个值的时候呢,到底怎么考虑这个空值的问题是吧?啊那这块我为什么说建议大家你停一下,你自己猜测一下,捋一下呢?哎,其实这里边儿我想锻炼大家的就是这个叫叫什么叫一种直观。啊,一种感觉。啊,就是随着大家呢,这个编程你接触的越来越多啊,最初的时候大家学这个编程语言,学这个SQ呢,其实你是呃没有什么概念的啊,老师教什么,你可能就学什么,然后呢,老师讲的细一点啊,你这个知识体系呢,是不是建立起来就更完整一些,更快一些是吧。
34:05
哎,当然到一定程度之后的话呢,大家其实你再针对一些陌生的问题的话呢,你是可以拿你现有的这些知识储备呢去来做分析的,那你想想我们其实每个人是不是都是如此啊,在你长大之前呢,你基本上都在学知识啊,来自于父母也好,来自于学校的老师也好,来自于这个社会,来自于电脑pad也好,都是都是一些途径,对吧?那么当你真正步入社会之后呢,其实你会变每天面临各种各样的未知的一些问题,这些问题呢,大部分呢,甚至你之前都没有过相关的处理经验,那你只能按照你之前的这个已经储备的这个知识体系呢,是不是去解决这种未知问题啊。啊,那么这是我们说的生活当中啊,或者说工作当中,那大家你回到编程这块呢,也是一样啊,也是一样啊,那么这些大公司呢,很多时候他为什么会喜欢要一些所谓的名校的呢?哎,他就认为这些名校呢,他之所以能考上去的,学习能力是比较强的,那么往往呢,也能够看到这样一些人在公司呢,呃,因为公司比较大嘛,整体上往前去以团队的方式在作战啊,往前拼的时候呢,呃,面对的其实更多的都是一些未知的场景。
35:09
啊,都是一些未知的场景,那么在这种未知的场景当中,学习能力强的人,他的知识体系呢,就更完整,那么他这个,呃,已利用已有的这个能力去解决问题的这个未知问题能力呢,就默认了,它会更强一些。啊,就会默认会更强一些,为啥默认呢?因为你看同样一份高考试卷,大家呢,都是这个学了高中三年啊,都进行了好几轮的复习,那为啥人家就能做这个高考题,高考题全都是模生题嘛,不可能有原题的,对吧?在解决这些问题的时候呢,他解决能力更强,所以他考的分高,所以他就去名校了,那么这个在工作当中呢,都是面对的未知问题,那么你已有的知识储备怎么去解决未知问题,那默认的话呢,就是诶这波高分的人会强一点。所以说大家呢,你不要觉得说这个大公司的这个歧视,学历低的这种歧视情况呢,他的的确确呢,它是存在的。啊,它是存在的,但是当然我们也强调了,学历呢,他不是唯一的指标啊,任何事情他都没有绝对的哈,我们说大部分是这样的,你说这就一个高中学生,然后他这块呢,就是能力很强,然后呢大工资也要了,你能说人家不行吗?哎,那就相当于是呢,我们不说学历不是唯一指标,他只能说作为一个重要指标啊之一是吧,哎,这样来解释啊,好,那么这块呢,大家就相当于你要建立这样一种直观。
36:21
啊,就是你有很多未知的,你要能够用你已有的这个体系,你看能不能给他猜测出来是吧,如果猜测是对的,说明你这种直观呢是比较好的,那也可以理解成你的这个素养呢,是比较高的啊。好,大家我们来看一下这三个呢,有可能谁跟谁是相等的,大胆的做一个猜测是吧。好,那么猜测呢,呃,有的很可能就会想说commitd呢,呃,求这个sum的时候呢,我们说只要有这个nor值参与的话呢,结果都是nor是吧,那会不会说我们这个结果呢,它就是个now呢。哎,它要是个no的话呢,你除以谁这个结果呢,它也应该是一个no是吧?啊这样的去理解的好,这是一种理解方式,呃,另外一的话呢,就是我们此时呢,求这个avg的时候呢,大家可能就会想,那就是没有考虑这个now值,把有这个now值的我们就哎把这个呃有这个具体值的我们就算到里边就求出来,哎,已有的这个的平均的,那这两个呢,就是这个跟这个基本上大家能够判定出来它俩呢。
37:15
呃,如果是闹的话呢,那肯定是没得说了,就全是闹了,如果要不是闹的话呢,这哥俩肯定是不一样了。这俩肯定不一样,因为分子是一样的分母的话呢,明显这个值呢是35是吧,我们刚才算的啊,这呢是107,所以呢,如果这个分子只要不是no,这俩结果肯定不一样。啊,那么告诉大家呢,就是这个情况的结果呢,还真不是这个萨姆哈,还真不是no,哎,相当于呢,就是我们萨姆呢,他在计算这个总和的时候呢,它其实也自动的把这个空值啊给过滤掉了。哎,说白了就是我们上边这些啊。上面这些呢,它都会过滤空值的,这个呢是咱们刚才讲上面这些是不是没有讲的是吧,上面大家感觉挺轻松,诶我们是通过count呢来给大家去说明这一点,就是萨姆在求的时候,本身他也没有考虑not值。
38:07
那进而的话呢,这个萨姆求出来的是不是也确实只有那35个人的这个奖金率的总和是吧?哎,没问题,好,那么关键问题就是,哎,那么这个第二个这个情况跟第三个肯定不一样了,关键是第一个跟谁一样,哎这块呢,就大家只能是做一个猜测了。啊,那么结论呢,哎,你会发现呢,我们是不是前边这哥俩是一样的是吧?哎,跟这个不一样。这个小呢,很容易理解,因为分母大嘛,我们这个呢,除的是不是35啊,哎,它除的也是35。那哎,通过这个三个式子,大家你看一下这个式子是不是它一定是成立的呀。不管你这块呢,是不是有控制,这是没有控制的,这是有控制的,是不是这个公式都成立啊。哎,这呢是咱们的一个,哎,这个公式,哎,大家稍微的可以去记一下的。
39:00
啊,可以去记一下啊,行,那如果啊,那我问大家一个问题啊。这呢,就咱们根据这个表当中去提的一个问题,或者叫一个需求吧。哎,需求是吧,哎什么呀,要查询这个,诶公司中的这个平均的奖金率。是吧,平均奖金率啊是多少,那么问大家,那我们这样求合不合适,就是咱们上面呢,没有提具体这个需求,就是只是从语法上呢去谈的,下面呢,我们来谈一下具体这个有这个需求了。诶,From这个employees。问大家如果呢,要查询公司的平均奖金率,问这样查询对吗?说是0.22度。是不是应该是错误的呀。啊,为什么说是错误的呢?当然你想,那我现在呢,换一个场景说,查询一下咱们每一个中国人的平均的这个啊工资是多少。
40:01
平均的工资是多少?那我问大家有,比如说有2亿人是没有工作的,那大家觉得这2亿人我们应不应该给他计算在内?啊,应不应该啊。哎,是不是显然应该呀,那我们来衡量这个每一个员工的,每一个中国人的这个平均的这个工资,实际上呢,就衡量他的一个生活水平了,那有这么多人都没有工作,那你其实也应该是不是给他填上啊。哎,应该是这样子的,所以说呢,呃,正确的。做法。正确的这个做法是什么样子呢?我们应该是哎select一下,那呃这个我们就应该应,呃这个你要写这个avg的话呢,是不是得得这么着,我先这样吧,哎,我们这个sum一下,这个commission PPT,哎这个呢sum呢,本身它就没有计算这个空值,所以这个呢就没事儿,关键下边这个位置呢,千万不要写这个了,是不是应该,哎把所有的比如中国人都得考虑在内是吧,14亿考虑在内啊,那我应该除107,但这块你不能写死107,那这个怎么处理啊。
41:03
啊,这个怎么处理啊,这个呢,我们实际上还是求这个count。啊,还是求这count,但是这里边的话,你可以是不是做个处理说如果呢,这个哎,如果if no,那咱们用它吧,哎如果呢,你这个位置它是一个no,我们这块呢,就写个零了。其实这块呢,我写零还是写几是不是都无所谓,关键呢你别写到就行是吧,啊就是你要是非空呢,就拿那个非空来算,你要是为空呢,就拿零来算,零只要不是空,我们就会计算当成一个数来算。啊,就跟咱们上面说的,你看的这个数具体是几没关系,关键你别是no就行是吧,我这呢就是拿零算的而已。好,那么接下来我们再去from here。啊,Employees。那这样子处理的是吧,来选中执行啊,就是应该是这个数,这个数是不是跟我们刚才一块除107得到的一个结果是一样的是吧?哎,就这样来去算才是合理的。那肯定呢,比你光算那个有奖率的那个数要低了。
42:01
啊,这是一种场景,或者的话呢,你看我直接呢,要是AG你要这样写呢,肯定是不太行了,那直接在这里边儿,我就写一个if now啊。哎,Commit BD,我这写个零,这样可不可以。这样可不可以?啊,相当于呢,就是我们在计算的时候,如果你要有值呢,就算如果没有值的话呢,是相当于把它当成这个零来去做这个计算,是不是也是可以的呀。哎,就这样子的啊,这呢才是我们这个需求的一个正确写法,那通过这个呢,大家你翻回去对应的知识呢,就是我们的count呢,是不计算这个空值的是吧。好,这个呢,就说清楚了啊。那么关于我们这个count呀,咱们说的这个情况呢,就比较多了啊,大家呢,通过这个count呢,去捋一捋啊去捋一捋,那么未来呢,咱们说这个表中到底有多少记录啊,大家你可以用这个是不是可以用这个就尽量的是不是就先不要考虑它了,是吧?哎,你不要考虑它了。行,那么这里边儿呢,关于呃到底用哪一个的话呢,其实涉及到有一个呃,这个呃优化的问题啊,这里边呢,确实啊存在了一个点,这个咱们等一下说。
我来说两句