00:00
好,接下来呢,我们来看一下这个我们日后要用到的一些函数来简单先提前给大家扫扫盲是吧?啊扫扫吗?啊这个又遇到这个class啊class塞,嗯,我之前上上一次讲课直接就用了是吧,直接用了它相当于是一个把多行变成一行对吧?哎,多行变成一行,那这个咱们之前讲过吗?这个克塞统计一下。啊,咱们讲过吗?班长,咱们讲过吗?啊。小可。讲过是吧,啊讲过啊,那讲过就好了啊,讲过就好办了哈,那这块呢,我就不再赘述了哈,这个class啊,这个class呢,这里面如果你没练过的话,你可以在这里面哎,插入一些数据啊,插入一些数据,然后呢,这是这个表里面数据的类型长成这样对吧,有有。这是数学啊,有中文啊,有中文有这个分数,这后面是分数。
01:01
前面这个呢是区域,这是北,我说一下吧,这是名称区域课程,然后课程分数,那就是张三在北京,然后数学88分,李四在北京,数学99啊,王五呢是在上海啊,中文92啊,那我们要统计什么呢?哎,统计的是。按照这个相应的课程。按照课程进行分组啊,分组统计,把多行变成一行。按照课程进行分组,把多行编一行,那你看吧,这里面就是按猜腻子猜,这里面是有三行啊三行,呃,三行。然后首先我这一块聚合的是I这个CLA site啊,它是一个去虫操作啊,如果遇到相同的把它去掉,那的话,正常有上海上海北京,那它聚合之后就变成。哎,一个对吧,啊一个字段就是上海拼上北京,把其中一个上海呢给过滤掉了,那另一个呢,是这个分数啊,也就分数的一个平均值,它会把这些加在一起,求出一个对应的啊平均值。
02:05
嗯,那下面呢,如果是mass的话,Mass这是两个值,那math的话,这是克莱艾瑞,艾瑞呢都是北京,那北京放到一个里面去,呃,后面呢,还有是这个求平均值,它们两个一加一算平均值啊,就都是它了啊行,大概知道它什么含义就行了,后面呢,我们会对它的一个使用啊。呃,再往下下看,另一个函数叫啊new啊new n v l,那VL呢,这个语法是怎么用呢?里面传进去表达是一和表达式二。你有表达式一表达二,具体的用法,如果表达是一为空,其实不是一个判空吗?你看它就长得像一个空,对吧?啊,如果它为空。那么new的返回值为,表达是二。也就是说它为空的话,表达式一为空,我取二的值。啊,取二的值,否则的话返回表达式一,一的值,也就说一要是不为空,我取它。当然这句话其实你可以翻译成什么呢?可以翻译成一个if。
03:05
If表达是一啊,如果不为空,我取表达是一,如果为空,取表达是二。稍微理解哈,别快,也就说一为空,我取二,一不为空,我返回一。嗯,该函数的目的呢,就是把空值转换成一个实际的值,其表达式的值呢,可以是数值,这不,这不行啊,日系型代表达是一和二的数据类型必须一致。哎,这句话说的意思是,你日后呢,这里面比较的内容可以是数字类型。可以是字符类型,也可以是日期,都没问题,都可以进行判断,但是呢,要注意你表达式一和表达式二的类型必须为同一个类型,你说你要么都是统一是数字,要么统一比较的字符,要么统一比较的是日期啊是这么一个要求哈,你说呢它呢其实是对这个if的一个简化。
04:02
咱们之前不用的是if判断吗?If谁谁等于空啊等于空,我取。对吧,然后else,我取new,还记得那个吗?啊那个行,那这里面呢,就是相当于是一个简化,再往下呢,是日期函数的一个处理。啊日期,日期呢,我们后续呢,要处理这个啊月周日啊,我们可以获取日的日期啊的一个加运算,周的日期加减运算,还有呢,就是这个月相关的一个处理,那这几个函数呢,非常重要,如果你作为后续的一个数仓工程师的话,那像这些函数呢,是不可能不会的,那首先看第一个吧,这个呢,这个date part,这个咱们之前用过对吧?啊用过应该也讲过哈,相当于是一个格式化啊,格式化那话,比如说传进来的数据呢,是2020年啊零三杠幺零,然后传进一个YYY,相当于是年举三月。也是这里面date方化之后就能取出来它对应的这个月啊,简单写一下吧,Select formate啊,Smart传进去你对应的这个值,2020杠零三杠幺零,然后对它进行格式化的要求,你想让它取什么,比如说想写年年年。
05:23
那就这个。很大。说错了啊,稍等一下啊,这也出来了啊,这这这么厉害。啊,这个呢,就是如果打Y半,那取的就是年对吧。那我想取的月月的话就在后面杠。哎,这样的话,年月就都已经取出来了,那当然了,这个之前咱们用的是这个,嗯,杠DD对吧,啊,年月日都能取出来。啊,那你前边这个呢,就是一般是其他的一个格式,后面加上十分秒啊,你可以把它过滤掉,是date ma呢,相当于是取出你想要的年月日啊这样的一个函数,那除了它之外呢,再往下呢,是有一个date at,日期的一个加减啊,日期的一加减,比如说你看这里面叫select date,传进去个日期减一。
06:18
哎,那就是在当前这个3月10号基础上减一变成3月9号试一下。这台0310,然后呢,我们想减一。哎,减一呢,就是在你传进来这个日期基础上,给你减去个一,那再来我想加一,你说变现成3月11号,取出3月11号的值,那当然了,我还可以减这个减十啊,加时啊,加时就是三月20呗。对吧,这样呢,就获取到的就是三月20非常灵活啊,那这里面呢,除了有这个date at之外啊,还有个什么呢?Date sub。
07:08
加是这个date at,那你看一下变成什么。你会发现3月10号减十了,变成了一个二月29SUB是减艾呢,是加at加,那有的时候啊这个呃,通常我的习惯呢,我就都用这个,都用at用用谁来控制呢?用后面这个我想减的话,我就我这样去写就行了,对吧。你看同样的效果吧,这是同样的效果哈,就是这个date得到它,这你用date之后呢,加一个负号也是能得到它的啊,这是加减一套函数啊,Date date s啊,知道这个就行,嗯,再往下我看还有一个什么呢,这是按日处理的哈,上面这个呢,你可以认为处理月用这个date from what,处理这个日呢,用的是date at和date shop,那下一个呢,是处理周,周呢,相对来说比较麻烦一点点啊,一点点啊,那比如说我想取当前天的下一个周一。
08:12
当前天的一个下一个周一,看我现在现在多少号,现在呢是3月27号,下一个周的周一,那不就是30号吗。我想他。那这怎么办呢?哎,简单,你要想取周一,那你就传进去mn Mo Monday的缩写啊,周一啊,你要想取这个周二,那就是Tuesday的一个缩写to,你要想取周三,W取这个周4TH啊,F这个周五是他周六周日。当然这里面你可以写简写,可以写全称。可以写全称啊,可以全称,比如说我们试一下,先先试这个简写吧。怎么写呢?SE select next,对,那里面比如说当前2020杠零三杠二七吧,二七。
09:09
二七啊,然后后面呢,这个。去下周1MO Monday,下周一是30号,确认一下,下周一是30号啊啊2020年30号,3月30号就把它取出来了,那我看一下这个Monday。Mo是吧,拼一下好不写这个单词啊。哎,对吧,哎,仍然是一样的啊,你写这个全称也行,你写这个简写也行啊,两个都可以哈,都可以,但是你写on on啊,有的行,有的就是后面那几个星期啊,有的行,有的不行,看这个行不行,嗯,这个是行的,但是呢,后面呢,有几个是不行的啊。好像是Tuesday还是哪一个啊,是有一个不行的,那这样的,要么你写这个前两个简写,要么你写全的啊,不要写来一个三个的啊,有三个呢,是有个别的行,有的是不行啊,这个呢是这个语法比较比较灵活一些。
10:12
那行,那我们取下周二呢,下周二我这个单词是什么,下周二是Tuesday。对,你看31号对吧,31号那这个比较简单之后呢,下面再来一个加深难难度了,叫取当前周的周一。什么叫当年周的周一呢?现在呢,我是27号,我想举当前周的周一,那是23号,我怎么把23号给它拿出来。怎么23号日期拿出来呢?我们通常的做法都是先取下一周的。你要想拿到周一,那你就去下一周的周一。啊,我们通常都是拿下周的周一啊,通常都是拿这个拿下一周的周一,然后你要想取今天的这个本周的周一,那就减七。
11:07
如果取二减六。减减。啊,周五的话解散,以此类推。这样去做哈,这样去做会比较好一些,那比如说我们来试一下,取当前周的周一。那这里面200杠。我们是二期啊,二期好,嗯,二期,然后呢,我们先把周一的时间取出来啊Monday。然后在这个基础上,我们要进行什么呢?哎,我们要取对它进行日期的一个加减,那日期加减就是date。
12:01
取出周一,在周一的基础上减七,好,通常都是这样去写代码哈,先取出周一,然后再减七,那三月27减七应该是三月23。三月23。这样就取出来了,那我减六,那取的就是周二三月24。啊,以此类推哈,比如说就这个date at和这个next day相应的一个组合搭配使用哈,后续呢,会大量的一个使用行,那就是取出任何一天按周去取的话啊,就用到了这个next内用它去取啊,而且呢,是以周一为单位哈,最好是取周一,取完周一之后对它日期进行一个加减啊,不要用其他的,再之后呢,是这个last day,求当月的最后一天的时期。当月最后一天,简单。
13:00
Last,诶,那比如说今天呢,是这个。2020杠零三杠二七。当月最后一天是多少钱?31号对吧,对吧,3月31号就能够给你取出来了,那四暂如果是四暂呢,三层你看它自动识别你是30天呢,还是31天呢,还是说是这个我看二月今年2月是不是特殊啊。二月呢?29号对吧,特殊啊,今年多了一些对吧?啊多了一些行,这就是整个基本函数的一些用法,后续呢,我们在用的过程当中呢,啊,都会涉及到哈。
我来说两句