MySQL的函数

news2025/1/18 20:28:40

目录

一.分类

聚合函数

概述

格式

操作

 数学函数

操作1

操作2

操作3

字符串函数

操作1

 操作2

操作3

操作4

日期函数

操作1

 操作2

操作3

控制流函数

if逻辑判断语句

case when 语句

 窗口函数

介绍

 分类

序号函数

开窗聚合函数- SUM,AVG,MIN,MAX

分布函数- CUME_DIST和PERCENT_RANK

前后函数-LAG和LEAD

 头尾函数-FIRST_VALUE和LAST_VALUE

 其他函数-NTH_VALUE(expr, n)、NTILE(n)


 

一.分类

在MySQL中,函数非常多,主要可以分为以下几类:

  1. 聚合函数
  2. 数学函数
  3. 字符串函数
  4. 日期函数
  5. 控制流函数
  6. 窗口函数

聚合函数

概述

在MysQL中,聚合函数主要由: count,sum,min,max,avg,这些聚合函数我们之前都用过,不再重复。这里我们学习另外一个函数:group_concat(),该函数用户实现行的合并

group_concat()函数首先根据group by指定的列进行分组,并且用分隔符分隔,将同一个分组中的值连接起来,返回一个字符串结果。

格式

说明

  • 使用distinct可以排除重复值;
  • 如果需要对结果中的值进行排序,可以使用order by子句;
  • separator是一个字符串值,默认为逗号。

操作

 

 

 

 数学函数

操作1

--求绝对值
select abs( -10);
select abs (10);
select abs(表示式或者字段) from 表;
--向上取整 
select ceil(1.1); -- 2
select ceil(1.0); -- 1
--向下取整
select floor(1.1); -- 1
select floor(1.9); -- 1
--取列表最大值
select greatest(1,2,3);

操作2

--取模
select mod (5,2);-- 1
--取x的y次方
select power(2,3); -- 8

操作3

--将小数的四舍五入取整
select round(3.5415);-- 3
--将小数的四舍五入取指定位数小数
select round(3.5415,3);-- 3.542

use mydb2 ;
select category_id, round(avg(price),2) from product group by category_id;

字符串函数

操作1

--字符串函数
-- 1:获取字符串字符个数
selectchar_length( ' hello ' ) ; -- 5
select char_length( '你好吗'); -- 3
-- length取长度,返回的单位是字节
select length( ' hello ' ); -- 5
select length('你好吗'); -- 9
-- 2:字符串合并
select concat( ' hello' , 'world');
select concat(c1,c2) from table_name;
-- 2:指定分隔符进行字符串合并
select concat_ws( '-', ' hello' , 'world' ); I
-3:返回字符串在列表中的位置
select field( 'aaa' , 'aaa' , ' bbb ' , 'ccc' ); -- 1
select field( 'bbb', 'aaa' , ' bbb' , 'ccc '); -- 2

 操作2

-- 4:去除字符串空格
select ltrim('   aaaa'); -- 去除左边空格
select rtrim('aaaa   '); -- 去除右边空格
select trim('  aaaa  '); -- 去除两端空格
-- 5:字符串截取
select mid("helloworld" ,2,3); -- 从第二个字符开始截取,截取长度为3
-- 6:获取字符串A在字符串中出现的位置
select position( 'abc' in 'habcelloabcworld ' );
-- 7:字符串替换
select replace( 'aaahelloaaaworld' , 'aaa' , 'bbb') ;
-- 8:字符串翻转
select reverse( ' hello ' );

操作3

-- 9:返回字符串的后几个字符
select right( 'hello',3); --返回最后三个字符
-- 10:字符串比较
select strcmp( ' hello' , ' world ' );
-- 11:字符串截取
select substr( ' hello',2,3); --从第二个字符开始截取,截取三个字符

操作4

-- 11:字符串截取
select substr( ' hello',2,3); --从第二个字符开始截取,截取三个字符
select substring( 'hello',2,3); --从第二个字符开始截取,截取三个字符
-- 12:将小写转大写
select ucase( "helloworld" );
select upper( "helloworld" );
-- 13:将大写转为小写
select lcase( "hellowor1d");
select lower( "helloworld" );

日期函数

操作1

--日期函数
-- 1:获取时间戳(毫秒值)
select unix_timestamp( );
-- 2:将一个日期字符串转为毫秒值
select unix_timestamp( ' 2021-12-21 08:08:08');
-- 3:将时间戳毫秒值转为指定格式的日期
select from_unixtime(1640045288,'%Y-%m-%d %H:%i:%s ')

 操作2

 

 

操作3

 

 

 

控制流函数

if逻辑判断语句

 

case when 语句

 

 窗口函数

介绍

  • MySQL 8.0新增窗口函数.,窗口函数又被称为开窗函数,与oracle窗口函数类似,属于MysaL的一大特点.
  • 非聚合窗口函数是相对于聚函数来说的。聚合函数是对一组数据计算后返回单个值(即分组),非聚合函数一次只会处理一行数据。窗口聚合函数在行记录上计算某个字段的结果时,可将窗口范围内的数据输入到聚合函数中,并不改变行数。

 分类

 另外还有开窗聚合函数: SUM,AVG,MIN,MAX

语法结构

 其中,window_function 是窗口函数的名称, expr是参数,有些函数不需要参数;OVER子句包含三个选项:
1.分区(PARTITION BY)
PARTITION BY选项用于将数据行拆分成多个分区(组),它的作用类似于GROUP BY分组。如果省略了PARTTION BY,所有的数据作为一个组进行计算
2.排序(ORDER BY)
OVER子句中的ORDER BY选项用于指定分区内的排序方式,与ORDER BY子句的作用类似以及
3.窗口大小(frame_clause) 。
frame_clause选项用于在当前分区内指定一个计算窗口,也就是一个与当前行相关的数据子集。

序号函数

序号函数有三个: ROW_NUMBER()、RANK()、DENSE_RANK(),可以用来实现分组排序,并添加序号。

格式

 操作

create database test2;
use test2 ;
create table employee (
	dname varchar (20) , -- 部门名
	eid varchar (20),
	ename varchar (20) ,
	hiredate date, -- 入职日期
	salary double -- 薪资
) ;


insert into employee values('研发部','1001','刘备','2021-11-01',3000),
							('研发部','1002','关羽','2021-11-02' ,5000),
							( '研发部','1003','张飞','2021-11-03',7000),
							('研发部','1004','赵云','2021-11-04',7000),
							( '研发部','1005','马超','2021-11-05',4000),
							( '研发部','1006','黄忠','2021-11-06',4900),
							( '销售部','1007','曹操','2021-11-01',2000),
							( '销售部','1008','许褚','2021-11-02',3000),
							( '销售部','10091','典韦','2021-11-03',5000),
							('销售部','1010','张辽','2021-11-04',6000),
							( '销售部','1011','徐晃','2021-11-05',9000),
							('销售部','1012','曹洪','2021-11-06',6000);
-- 对每个部门的员工按照薪资排序,并给出排名
select  *, row_number () over (partition by dname  order by salary desc ) as pm from employee e ;

select  *, rank () over (partition by dname  order by salary desc ) as pm from employee e ;
select  *, dense_rank  () over (partition by dname  order by salary desc ) as pm from employee e ;

输出的结果依次是

row_number:

rank:

dense_rank:

 

开窗聚合函数- SUM,AVG,MIN,MAX

概念
在窗口中每条记录动态地应用聚合函数(SUM()、AVG()、MAX()、MIN()、CcOUNT()),可以动态计算在指定的窗口内的各种聚合函数值。

 操作

 

 8000=3000+5000
15000=3000+5000+7000
……

 

 

 

 

 

分布函数- CUME_DIST和PERCENT_RANK

介绍-CUME_DIST

  • 用途:分组内小于、等于当前rank值的行数/分组内总行数
  • 应用场景:查询小于等于当前薪资(salary)的比例

操作

 

 

介绍-PERCENT_RANK

  • 用途:每行按照公式(rank-1)/(rows-1)进行计算。其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数
  • 应用场景:不常用

操作

 

 

前后函数-LAG和LEAD

介绍

  • 用途:返回位于当前行的前n行(LAG(expr,n))或后n行(LEAD(expr,n))的expr的值
  • 应用场景:查询前1名同学的成绩和当前同学成绩的差值

操作

 1是指把上一行的输出,后面的是默认值

 

 

 头尾函数-FIRST_VALUE和LAST_VALUE

介绍

  • 用途:返回第一个(FIRST_VALUE(expr))或最后一个(LAST_VALUE(expr)) expr的值
  • 应用场景:截止到当前,按照日期排序查询第1个入职和最后1个入职员工的薪资

操作

 

 其他函数-NTH_VALUE(expr, n)、NTILE(n)

介绍-NTH_VALUE(expr,n)

  • 用途:返回窗口中第n个expr的值。expr可以是表达式,也可以是列名
  • 应用场景:截止到当前薪资,显示每个员工的薪资中排名第2或者第3的薪资操作

操作

 

 介绍-NTILE

  • 用途:将分区中的有序数据分为n个等级,记录等级数
  • 应用场景:将每个部门员工按照入职日期分成3组

操作

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 对象拷贝与转换-org.mapstruct:mapstruct 包(@Mapper、@Mapping)的使用

MapStruct的使用 最近在学习技术时候,发现一个特别好用的包,org.mapstruct:mapstruct,它是专门用来处理 domin 实体类与 model 类的属性映射的 它的优势: 很多项目大量映射的方式通过手动get、set,首先写法很low&…

并发编程 · 基础篇 · android线程那些事

小木箱成长营并发编程系列教程(排期中): 并发编程 基础篇(下) android线程池那些事 并发编程 提高篇(上) Java并发关键字那些事 并发编程 提高篇(下) Java锁安全性那些事 并发编程 高级篇(上) Java内存模型那些事 并发编程 高级篇(下) Java并发BATJ面试之谈 并发编程…

Jupyter notebook——在Anaconda中多个环境下,设置不同的默认打开路径

项目背景:anaconda中搭建了一个python3.6,一个python3.7版本,python3.6环境版本的jupyter notebook默认打开路径设置为:D:\DeepLearning\cv,修改jupyter notebook默认路径见:https://blog.csdn.net/qq_1881…

分享115个图片切换JS特效,总有一款适合您

分享115个图片切换JS特效,总有一款适合您 115个图片切换JS特效下载链接:https://pan.baidu.com/s/1QX7b5LDlY6lBqMVjgBKSwA?pwdk05d 提取码:k05d Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj jQuery多图…

Appium+Python+pytest自动化测试框架

先简单介绍一下目录,再贴一些代码,代码里有注释Basic目录下写的是一些公共的方法,Data目录下写的是测试数据,image存的是测试失败截图,Log日志文件,Page测试的定位元素,report测试报告&#xff…

Linux从入门到精通

Linux从入门到精通 1. Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接…

Nacos 注册监听器

文章目录前言项目文件说明pom依赖bootstrap.ymlNacosConfig 配置类监听器实现类-默认实现监听器实现类-json配置处理注册监听器监听器的效果前言 本文主要讨论Nacos作为配置中心时,其中配置内容发生更改时,我们的应用程序能够做的事。 一般使用监听器来…

DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合

目录 Mobilenetv2的改进 浅层特征和深层特征的融合 完整代码 参考资料 Mobilenetv2的改进 在DeeplabV3当中,一般不会5次下采样,可选的有3次下采样和4次下采样。因为要进行五次下采样的话会损失较多的信息。 在这里mobilenetv2会从之前写好的模块中…

第四天链表

24. 两两交换链表中的节点力扣题目链接(opens new window)给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。接下来就是交换相邻两个元素了,此时一定要画…

vite --- 为什么选Vite

目录 什么是Vite 为什么选Vite 现实问题 为什么生产环境仍需打包 Vite 与竞品 什么是Vite Vite(法语意为 "快速的",发音 /vit/,发音同 "veet")是一种新型前端构建工具,能够显著提升前端开发体…

SpringBoot+Vue图书馆管理系统1.0

简介:本项目采用了基本的SpringBootVue设计的图书馆管理系统。详情请看截图。经测试,本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 项目描述 项目名称SpringBootVue图书馆管理系统1.0源码作者LHL项目类型Java EE项目 &#xff…

Zebec 上线投票治理机制,全新流支付生态正在起航

随着加密货币的兴起,其除了成为一种备受关注的投资品外,它也正在成为一种新兴的支付手段。虽然在加密行业发展早期,以BTC、LTC等为代表的以支付为定位老牌加密资产,因支付效率低下、支付成本高、合规等问题而没能实现早期的愿景&a…

Node.js:CommonJS模块化规范

CommonJS 上文提到了 Node 采用的模块化规范是 CommonJS,它主要规定了如何定义模块,如果导出模块和如何导入模块: 定义模块:一个文件就是一个模块导出模块:通过 module.exports 导出模块导入模块:通过 re…

【Linux】第八部分 Linux常用基本命令

【Linux】第八部分 Linux常用基本命令 文章目录【Linux】第八部分 Linux常用基本命令8. Linux常用基本命令8.1 帮助命令8.2 文件目录类命令pwd 显示当前工作目录的绝对路径cd 切换目录ls 列出目录的内容mkdir 创建目录rmdir 删除目录touch 创建文件cp 复制文件或者目录rm 删除文…

Kaggle系列之预测泰坦尼克号人员的幸存与死亡(随机森林模型)

Kaggle是开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台,本节是对于初次接触的伙伴们一个快速了解和参与比赛的例子,快速熟悉这个平台。当然提交预测结果需要注册,这个可能需要科学上网了。我们选择一个预测的入…

【操作系统】4、设备管理

文章目录四、设备管理4.1 I/O设备基本概念4.2 I/O控制方式4.2.1 程序控制方式4.2.2 中断方式4.2.3 DMA控制方式4.2.4 通道控制方式4.3 缓冲技术4.4 假脱机技术四、设备管理 I/O控制方式:程序控制、中断、DMA、通道, 缓冲技术;假脱机技术(SPO…

大龄学长的浙大MBA提面优秀之路分享

作为今年上岸浙大MBA项目的一名中年老学长,想把自己在提面中取得优秀资格的经验做个梳理供大家参考,因为以我的经历来说,我认为浙大MBA提前批面试是非常有价值的,而且在提面过程中也发现了优秀资格其实遍布于各个年龄段和层级&…

2023-02-04 Elasticsearch环境安装

1 JDK-8的安装 查询资料自我安装即可,这里不做展示。 2 Elasticsearch 的安装 Elasticsearch目录结构: 配置文件: #节点名称,集群内要唯一 node.name: node-1001node.master: true node.data: true#ip 地址 network.host: localhost htt…

细讲TCP三次握手四次挥手(一)

计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。 网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就必…

lsof - list open file

lsof 指令全称 list open file,用官方的话说 Lsof revision 4.91 lists on its standard output file information about files opened by processes -i 平常工作中,用到最多的就是 -i 参数,后面跟端口号,可以查看和这个端口有关…