Py学习  »  DATABASE

如何轻松地解决Mysql函数难题?学习视频限时免费领!

CDA数据分析师 • 3 年前 • 179 次点击  

你在工作过程中,有没有遇到函数难题?


要知道,数据库中函数实在太多了,每个去都学习的话,成本的确有点高。但其实,常用的函数就那些。


今天我们给你整理了常用函数及示例,希望对你有所帮助。


一、字符串函数


CONCAT(str1,str2,...)  # 把多个文本字符串合并成一个长字符串()


示例:


SUBSTRING ( expression, start[,length]) # 截取字符串,第三个参数可以省略,表示截取剩余所有字符。

 

示例:


TRIM(str) # 返回删除了两边空格的字符串str

 

示例:


REPLACE(str,from_str,to_str) # 用字符串to_str替换字符串str中的子串from_str并返回

 

示例:


二、日期时间函数


基础函数有:

DATE(date),YEAR(date),MONTH(date),DAY(date),HOUR(datetime)


这里重点介绍日期时间进行加减运算和时间戳

 

DATE_ADD(date,interval expr type)

 

示例:


DATE_SUB(date,interval expr type)

 

示例:


TIMESTAMPDIFF(type,expr1,expr2) # 返回起始日expr1和结束日expr2之间的时间差整数

 

示例:

日期202-01-02至2020-3-22相差2个月



UNIX_TIMESTAMP([date]) # 返回一个unix时间戳(从'1970-01-01 08:00:00'开始的秒数

 

示例:


FROM_UNIXTIME(unix_timestamp) # 以'yyyy-mm-dd hh:mm:ss'或yyyymmddhhmmss格式返回时间戳的值

 

示例:


三、分组合并函数(文本聚合函数)


GROUP_CANCAT([distinct] str [order by strasc/desc] [separator])  #将group by产生的同一个分组中的值连接起来,返回一个字符串结果

 

示例:

查询每个部门的员工姓名


四、开窗函数(重点)


Mysql8.0版本才支持开窗函数,也可以叫做数据分析函数, 开窗函数的本质还是聚合运算,只不过它更具灵活性,它对数据的每一行,都使用与该行相关的行进行计算并返回计算结果。

 

语法:


开窗函数的一个概念是当前行,当前行属于某个窗口,窗口由over关键字来指定函数执行的窗口范围。如果后面括号中什么都不写,则意味着窗口包含满足where条件的所有行,开窗函数基于所有行进行计算;如果不为空,则有三个参数来设置窗口:

 

partition by子句:按照指定字段进行分区,两个分区由边界分隔,开窗函数在不同的分区内分别执行,在跨越分区边界时重新初始化。

 

order by子句:按照指定字段进行排序,开窗函数将按照排序后的记录顺序进行编号。可以和partitionby子句配合使用,也可以单独使用。

 

frame子句:当前分区的一个子集,用来定义子集的规则,通常用来作为滑动窗口使用。

 

示例1:有个员工表emp,查询所有员工的平均工资

 

select *,avg(sal) over() 所有员工平均工资 from emp;
#当over中没有指定分区、排序和滑动窗口时,将整个表作为一个区,默认计算的是平均工资



示例2  查询各部门平均工资


select *,avg(sal) over(partition by deptno) 部门平均工资 from emp;
#当over中指定了分区,但是没有指定排序和滑动窗口时,默认计算的是当前分区内的平均工资


示例3 开窗函数滑动窗口求移动平均工资 


#实现效果是 部门分区后 当前行的前一行和后一行求平均工资  (相当于移动求平均工资)  
select *,avg(sal) 
over(partition by deptno order by hiredate rows between 1 preceding and 1 followingas 移动平均工资
from emp;



从上述示例中可以看到开窗函数和普通聚合函数的区别:


  • 聚合函数是将多条记录聚合为一条;而开窗函数是每条记录都会执行,有几条记录执行完还是几条。


  • 聚合函数也可以用于开窗函数中。


实际工作中,还有比较多常用开窗函数,动态窗口函数有first_value(),  last_value(), nth_value()等,其实基本语法都差不多,如果遇到业务需求再网上查找帮助文档让你事半功倍。

 

如果想学习更多SQL技能
299元学习视频
限时免费领取(1月29日-1月31日)
 
赶紧扫码加客服微信
同时备注关键词 “SQL

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/107031
 
179 次点击