社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

CDA数据分析师 • 4 年前 • 373 次点击  

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


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


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


一、字符串函数


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
 
373 次点击