SQL函数
函数呢,主要讲四个方面的函数:数学函数、字符串函数、日期函数、窗口函数和其他常用函数。
数字函数
对于数字型的变量的函数主要包括加、减、乘、除、幂、四舍五入(round)、取余以及聚合函数中的min、max、sum、count等函数。其中的min、max、sum、count等函数,在聚合函数中已经介绍了,这里也就不再重复说了。但是需要注意的一点是,这些聚合函数可不仅仅适用于group by。举个例子,在某些场景下会把负数转为0,这种情况下就可以借助max函数,使用max(变量,0)就可以实现将负数转换成0。
在这里补充一个count函数的使用。count还有一个最常用的功能就是查询数据表有多少行,在计数行数时有三种方式,分别是count(1),count(*),count(col_name),三者都可以实现对数据表行数的记录,区别在于对空值的处理不同。其中count(1)和count(*)是对全部的行进行计数,包含空值;count(col_name)是对某一列的数据进行计数统计,而且不包含空值的计数。
字符串相关函数
字符串相关函数在数据分析师日常工作中使用比较少,因为数据分析师使用的通常是已经加工好的数据,而字符串相关的函数本质是在加工数据。字符串相关函数可以分成两个维度,一个是对字符串进行描述,二是对字符串进行操作。对字符串进行描述,包括计算字符串长度和判断字符串中是否包含某个字符;对字符串操作主要是字符串的截取、拼接、替换。
len()函数:计算字符串的长度,如select len("abc"),其返回的结果就是3,代表这个字符串的长度为3。
like函数:其实是字符串的匹配,即判断某个字符串中是否包含特定的模式,如“张三” like “张%”,就是通过匹配来判断是否包含。这里面%是通配符,表示任意一个或多个字符。除like函数外,rlike函数也可以实现相似字符串的筛选,区别在于like依赖通配符进行匹配,而rlike则可以使用正则表达式进行匹配,正则表达式的可以实现更丰富的功能。在SQL教程就不展开探讨正则表达式的内容,关于正则表达式的内容可参考https://www.runoob.com/regexp/regexp-syntax.html:
select "张三" like "张%"
字符串的截取常用的函数有:left、right和substr函数。left函数是从字符串左侧开始截取n个字符,所以其函数形式是left(字段名,n),其中n代表截取n个字符,right函数相同,不过是从右侧开始截取。substr函数,则是可以从任意位置开始截取,其变量包含了三个,也就是从字符串的哪个位置开始截取多少个字符,所以其函数形式为substr(str,i,n),str是字段名称,i表示开始截取的位置,n表示截取多少个字符。
select left("Structure Query Language",9) --上面函数表示查询"Structure Query Language"从第1个字符开始,查询到第9个字符,也就是"Structure",注意,空格也算一个字符 select right("Structure Query Language",8) --表示从右侧开始往左,查询8个字符,也就是"Language" select substr("Structure Query Language",11,5) --表示从第11位开始查询,查询5个字符,由于空格占一个字符,所以查询结果是"Query"
实际应用中可以选择切合需要的函数处理即可。
concat函数:字符串的拼接,函数形式也比较简单,是concat(str1,str2,…,strn)表示将n个字符串进行拼接,如果需要分隔符怎么办?很简单,把分隔符作为str放入函数即可。
select concat("Structure","Query","Language") --上面查询出的结果是"StructureQueryLanguage",会发现真的是拼在一起了,中间并没有分隔符,如果想添加分隔符,有两种方法,一是在字符串中就添加,二是添加新的字符串。 --第一种方法 select concat("Structure"," Query"," Language") --第二种方法 select concat("Structure"," ","Query"," ","Language") --上述两种方法查询出来的结果都是"Structure Query Language",会添加相应的空格
使用两种方法实现添加空格的方法在少量字符串的情况下是可行的,但是在有着大量字符串的情况下就很麻烦,所以可以使用concat同族函数concat_ws(分隔符,str1,str2,……)
select concat_ws(" ","Structure","Query","Language")
字符串的替换:replace函数,函数形式为replace(str,"被替换的内容","替换后的内容"),几乎用不到的函数。
select replace("Structure Query Language"," ","-") --上面函数查询的意思是说把字符串"Structure Query Language"中的空格替换为"-",所以查询结果是"Structure-Query-Language"
replace函数几乎用不到,知道存在替换函数就可以。
split函数
Split函数是把字符串按照分隔符分割开来,其基本用法是select split(字符串,分隔符)
可以实现把字符串按照分隔符进行拆分,拆分后是一组数据,可以选择这组数据中的某一项
select split("AB-CD","-")[0]
表示把字符串"AB-CD"按照"-"分割开来,生成["AB","CD"],又因为使用了[0],也就是选择第一项,所以最终的返回结果是"AB"
由于mysql或者sql server中都没有内置的split函数,在网页工具中无法演示。
字符串相关的函数使用特别少,所以对上述函数有一定了解即可,具体的函数名称与使用的SQL版本相关,到时候具体百度相关函数和具体的操作即可。
日期相关函数
日期相关函数主要是两类:日期的拆分、时间间隔的计算和日期的移动。
日期的拆分很容易理解,就是获取相应日期的年月日,所使用的函数就是year、month和day,函数的变量也就是日期格式的字段名称
select year('2020-08-12'), month('2020-08-12'), day('2020-08-12') --上面的函数,就是提取相应的日期变量中的年月日,查询结果是2020,08,12
时间间隔的计算,在MySQL中有两个函数:datediff和TimeStampDiff。datediff是计算两个日期之间的间隔天数,无法计算其他维度的间隔时长,TimeStampDiff使用更灵活,可以计算间隔天数、月数等。而且两个函数的变量位置也不同。datediff(enddate,startdate),是结束的日期在前,而在TimeStampDiff(datepart,start_date,end_date),datepart就是以什么单位度量这段时间间隔,常用的有day、month、year等。
select TimeStampDiff(day,'2020-07-01','2020-08-01') --上面的函数就是计算两个日期的间隔天数,计算结果是31,即两个日期之间间隔31天 select TimeStampDiff(month,'2020-07-31','2020-08-01'), TimeStampDiff(mont
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
数据分析入门技术篇