当前位置: 首页 > news >正文

学习笔记-mysql-各种函数的基本使用

1. 聚合函数

count , sum , min , max ,avg , group_concat()

-- 将所有员工的名字合并成一行 
select group_concat(emp_name) from emp;
-- 指定分隔符合并 
select department,group_concat(emp_name separator ';' ) from emp group by department; 
-- 指定排序方式和分隔符 
select department,group_concat(emp_name order by salary desc separator ';' ) from emp group by department;
-- 附上 sql server 的写法  比较
select department,STRING_AGG(emp_name ,';') from emp group by department

2. 数学函数

-- 绝对值
select abs(-10)  --返回10
-- 向上取整
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);  --3
select least(1,2,3);  --1
-- 取模 求余数
select mod(5,2) --1
-- x的y次方
select power(2,3)  --8
-- 取随机数
select rand()  --随机数(0到1)
select floor(rand() * 100 ) --100以内随机数
-- 将小数四舍五入取整
select round(3.5345)  --4
select round(3.5345,3)  --3.535
-- 将小数直接截取到指定位数
select truncate(3.1415,3)  --3.141

3. 字符串函数

-- 获取字符串长度
select char_length('hello'); --5
select char_length('你好吗');  --3
select length('hello'); --5
select length('你好吗');  --9  length取长度返回的是字节
-- 字符串合并
select concat('hello','world');  -- helloworld 无分隔符
select concat_ws('-','hello','world'); -- hello-world 有分隔符
-- 返回字符串在列表中第一次出现的位置
select field('aa','aa','bb','cc');  --1
select field('bb','aa','bb','cc');  --2
-- 去除字符串空格
select ltrim('  aaaa');
select rtrim('aaaa    ');
select trim('  aaaa    ');
-- 字符串截取
select mid('helloworld',2,3);  --ell
select substr('helloworld',2,3);  --ell
select substring('helloworld',2,3);  --ell
-- 获取字符串a在字符串b中的位置
select position('abc' in 'habchelloworld') --2
-- 字符串替换
select replace('habchelloworld','habc','') --helloworld
-- 字符串翻转
select reverse('hello') --olleh
-- 返回字符串的后几个字符
select right('hello',2)  --lo
-- 小写转大写
select ucase('hello');
select upper('hello');
-- 大写转小写
select lcase('Hello');
select lower('Hello');

4. 日期函数

-- 获取时间戳(毫秒值) 返回从1970-01-01 00:00:00到当前毫秒值
select unix_timestamp()
-- 将指定的时间转为毫秒时间戳
select unix_timestamp('2023-11-11 11:11:11')
-- 将时间戳毫秒值转为指定的时间格式
select from_unixtime(1598079966,'%Y-%m-%d %H:%i:%s');
-- 获取当前日期
select curdate() --年月日
select current_date()  --年月日
select current_time()  --时分秒
select curtime()  --时分秒
select current_timestamp() ;-- 年月日时分秒
select now() -- 年月日时分秒
-- 从具体时间中获取年月日
select date('2023-11-11 11:11:11')  --2023-11-11
-- 获取日期之间的差值
select datediff('2023-11-11','2023-11-1')  --10
-- 获取时间的差值(秒级)
select timediff('8:40:00','12:00:00') 
-- 日期格式化
select date_format('2023-1-1 1:1:1','%Y-%m-%d %H:%i:%s') --2023-01-01 01:01:01
-- 将字符串转为日期
select str_to_date('2023-1-1 1:1:1','%Y-%m-%d %H:%i:%s'); --2023-01-01 01:01:01
SELECT str_to_date("August 10 2017", "%M %d %Y") --2017-08-10
-- 将日期进行加减
select date_sub('2023-11-11',interval 2 day) --2023-11-09
select date_add('2023-11-11',interval 2 month) --2024-01-11
-- 从日期中获取 年|月|日|时|分|秒..
select extract(year from '2023-11-11')
select day('2023-05-01 11:22:33')
select month('2023-05-01 11:22:33')
select quarter('2023-05-01 11:22:33')  --2 季度
select monthname('2023-05-01 11:22:33') -- may
select dayname('2023-05-01 11:22:33') -- Monday 周几
select dayofweek('2023-05-01 11:22:33') -- 2 这周的第几天
select dayofmonth('2023-05-01 11:22:33') -- 1 这个月的第几天
select dayofyear('2023-05-01 11:22:33') -- 121 这年的第几天
select week('2023-05-01 11:22:33') -- 18 这年的第几周
-- 获取给定日期所在月的最后一天
select last_day('2023-11-11') --2023-11-30
--获取指定年份和天数的日期
select makedate('2023',53) --2023-02-22

5. 控制流函数

(1). if逻辑判断
-- if(expr,v1,v2)  表达式expr成立返回v1,否则返回v2
select if(score>80,'优秀','及格') flag ,* from score 
-- ifnull 如果表达式时null,转换显示为指定值
select ifnull(5,0); -- 5
select ifnull(null,0); -- 0
-- isnull 判断表达式是否为null
select isnull(5); -- 0
select isnull(null); -- 1
-- nullif(expr1,expr2) 判断两个字符串是否相同,相同返回null,不同返回expr1
select nullif(12,12); -- null
select nullif(12,13); -- 12
注意:在sql server 中isnull()的用法与mysql中的ifnull用法一致,没有ifnull
(2). case when

6. 窗口函数

mysql 8.0之后增加的,也称为开窗函数

(1). 序号函数
  • row_number( ) --排序 1,2,3
  • rank( ) --排序 1,1,3
  • dense_rank( ) --排序 1,1,2
  • 另外还有开窗聚合函数:sum avg min max
-- 格式
row_number()|rank()|dense_rank() over ( partition by ... order by ... 
) 
(2). 分布函数
  • cume_dist()
    用途:分组内小于、等于当前rank值的行数 / 分组内总行数
-- 查询小于等于当前薪资
select  dname,ename,salary,
cume_dist() over(order by salary) as rn1, -- 没有partition语句 所有的数据位于一组
cume_dist() over(partition by dept order by salary) as rn2 
from employee;
  • percent-rank()
    用途:每行按照公式(rank-1) / (rows-1)进行计算。其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数
-- 
select dname,ename,salary,
rank() over(partition by dname order by salary desc ) as rn,
percent_rank() over(partition by dname order by salary desc ) as rn2
from employee;
(3). 前后函数
  • lag(expr,n,x)
    用途:返回位于当前行的前n行(lag(expr,n))或后n行(LEAD(expr,n))的expr的值
-- last_1_time 查询排序前1名职员的入职时间
-- last_2_time 查询排序前2名职员的入职时间
-- '2000-01-01'分组的第一个值没有前一行,所以设置一个默认值,可不写,返回null
select dname,ename,hiredate,salary,
lag(hiredate,1,'2000-01-01') over(partition by dname order by hiredate) as last_1_time,
lag(hiredate,2) over(partition by dname order by hiredate) as last_2_time 
from employee;
  • lead(expr,n,x)
    用途:返回位于当前行的后n行
-- last_1_time 查询排序后1名职员的入职时间
-- last_2_time 查询排序后2名职员的入职时间
-- '2000-01-01'分组的第一个值没有前一行,所以设置一个默认值,可不写,返回null
select dname,ename,hiredate,salary,
lead(hiredate,1,'2000-01-01') over(partition by dname order by hiredate) as last_1_time,
lead(hiredate,2) over(partition by dname order by hiredate) as last_2_time 
from employee;
(4). 头尾函数
  • first_value | last_value
    用途:first_value(expr) 到目前为止的排序第一的
    last_value(expr) 到目前为止的最后一个,实际上就是本行的值
-- 截止到当前,按照日期排序查询第1个入职和最后1个入职员工的薪资
-- 注意,  如果不指定ORDER BY,则进行排序混乱,会出现错误的结果
selectdname,ename,hiredate,salary,
first_value(salary) over(partition by dname order by hiredate) as first,
last_value(salary) over(partition by dname order by  hiredate) as last 
from  employee;
(5). 其他函数
  • nth_value(expr,n)
    用途:返回窗口中第n个expr的值。expr可以是表达式,也可以是列名
--截止到当前薪资,显示每个员工的薪资中排名第2或者第3的薪资
select  dname,ename,hiredate,salary,
nth_value(salary,2) over(partition by dname order by hiredate) as second_score,
nth_value(salary,3) over(partition by dname order by hiredate) as third_score
from employee
  • ntile(n)
    用途:将分区中的有序数据分为n个等级,记录等级数
-- 根据入职日期将每个部门的员工分成3组
select dname,ename,hiredate,salary,
ntile(3) over(partition by dname order by  hiredate  ) as rn 
from employee;

相关文章:

学习笔记-mysql-各种函数的基本使用

1. 聚合函数 count , sum , min , max ,avg , group_concat() -- 将所有员工的名字合并成一行 select group_concat(emp_name) from emp; -- 指定分隔符合并 select department,group_concat(emp_name separator ; ) from emp group by department; -- 指定排序方式和分隔…...

DD小桔高级数分 2面挂

偏业务分析一点,注重AB实验在实际业务中的操作、业务方交流方式 一面|同事面 中规中矩,面试内容偏简单,不知道是不是因为晚8点面试的原因项目没有进行深究 自我介绍项目介绍1.你在实际项目中是怎么设计AB实验2.你在实际业务场景中是怎么判…...

居中面试问题

前端常问居中面试问题 css文本居中 文本水平居中 <div class"father"><div class"child"><div> <div>子类元素为行内元素&#xff0c;则给父类元素定义text-align:center 如果子元素是块元素&#xff0c;则给子元素定义margin&…...

网页设计-用户体验

Use Cases (用例) 用例是用户如何在网站上执行任务的书面描述&#xff0c;从用户的角度描述了系统响应请求时的行为。每个用例都是用户实现目标的一系列简单的步骤。简言之&#xff0c;用例是一种用于描述系统如何满足用户需求的方法。 用例的好处 1. 明确需求&#xff1a; Use…...

docker应用:vocechat

简介&#xff1a;VoceChat是一款超轻量级的Rust聊天应用程序、API和SDK&#xff0c;优先考虑私人托管。使用VoceChat建立您自己的聊天功能&#xff01;作为一款非常好用的通讯应用程序&#xff0c;它可以让你与朋友、家人和同事进行即时消息聊天&#xff0c;支持图片视频的分享…...

linux 02 vmware的快照,文件管理

01.快照 使用快照&#xff1a; 同时的快照管理器&#xff1a; 如果想要返回快照&#xff0c;选择要选择的快照&#xff0c;跳转 02. 文件管理&#xff1a; cd 修改当前路径 02.touch 创建文件 03. mkdir 创建文件夹 mkdir -p 文件夹 &#xff08;创建之前没有的上级文件…...

项目架构之Zabbix部署

1 项目架构 1.1 项目架构的组成 业务架构&#xff1a;客户端 → 防火墙 → 负载均衡&#xff08;四层、七层&#xff09; → web缓存/应用 → 业务逻辑&#xff08;动态应用&#xff09; → 数据缓存 → 数据持久层 运维架构&#xff1a;运维客户端 → 跳板机/堡垒机&#x…...

RocketMQ源码阅读-Message消息存储

RocketMQ源码阅读-Message消息存储 1. CommitLog的作用2. CommitLog 存储消息3. 时序图4. 小结 在Broker消息接收一篇中&#xff0c;分析到Broker接收到消息&#xff0c;最终会调用CommitLong#putMessage方法存储消息。 本篇来分析CommitLong#putMessage存储消息的流程。 1. C…...

《C语言学习》---郝斌版---笔记

简介 学习计算机&#xff0c;离不开C语言的学习&#xff0c;而C语言学习过程中的视频课教程&#xff0c;目前来说&#xff0c;如果郝斌老师的C语言排第二&#xff0c;没有人敢排第一 郝斌老师的C语言教程&#xff0c;通俗易懂&#xff0c;引人发思&#xff0c;特别适合新手入门…...

Python(32):字符串转换成列表或元组,列表转换成字典小例子

1、python 两个列表转换成字典 字符串转换成列表 列表转换成字典 column "ID,aes,sm4,sm4_a,email,phone,ssn,military,passport,intelssn,intelpassport,intelmilitary,intelganghui,inteltaitonei,credit_card_short,credit_card_long,job,sm4_cbc,sm4_a_cbc" …...

CentOS 7 安装私有平台OpenNebula

目录 一、配置yum源 二、配置数据库MySQL 2.1 安装MySQL 2.2 修改MySQL密码 2.3 创建项目用户和库 三、安装配置前端包 四、设置oneadmin账号密码 五、验证安装 5.1 命令行验证安装 5.2 数据存放位置 5.3 端口介绍 5.4 命令介绍 六、访问 6.1 设置语言 6.2 创建主…...

(aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器

1. 背景介绍 在先前的博客文章中&#xff0c;我们已经搭建了一个基于SRS的流媒体服务器。现在&#xff0c;我们希望通过Web接口来控制这个服务器的行为&#xff0c;特别是对于正在进行的 RTSP 转码任务的管理。这将使我们能够在不停止整个服务器的情况下&#xff0c;动态地启动…...

基于STM32微控制器的四轮智能小车控制系统设计

标题&#xff1a;基于STM32微控制器的四轮智能小车控制系统设计与实现 摘要&#xff1a; 本文针对移动机器人领域的应用需求&#xff0c;详细介绍了基于STM32系列单片机&#xff08;以STM32F103C8T6为例&#xff09;为核心的四轮小车控制系统的设计和实现过程。该系统集成了电…...

JPA的复杂查询包括一对多多对一和多对多的查询

1. 多表关联查询和排序 假设我们有两个实体类&#xff1a;Customer和Order&#xff0c;它们之间是一对多的关系&#xff0c;即一个客户可以有多个订单。我们想要查询某个客户的所有订单&#xff0c;并按订单金额进行降序排序。 Entity Table(name "customers") pu…...

电脑文件mfc100u.dll丢失的解决方法分析,怎么修复mfc100u.dll靠谱

mfc100u.dll丢失了要怎么办&#xff1f;其实很多人都遇到过这样的电脑故障吧&#xff0c;说这个mfc100u.dll文件已经不见了&#xff0c;然后一些程序打不开了&#xff0c;那么这种情况我们要怎么解决呢&#xff1f;今天我们就来给大家详细的说说mfc100u.dll丢失的解决方法。 一…...

从DETR到Mask2former(2): 损失函数loss function

DETR的损失函数包括几个部分&#xff0c;如果只看论文或者代码&#xff0c;比较难理解&#xff0c;最好是可以打断点调试&#xff0c;对照着论文看。但是现在DETR模型都已经被集成进各种框架中&#xff0c;很难进入内部打断掉调试。与此同时&#xff0c;数据的label的前处理也比…...

Java21 + SpringBoot3集成WebSocket

文章目录 前言相关技术简介什么是WebSocketWebSocket的原理WebSocket与HTTP协议的关系WebSocket优点WebSocket应用场景 实现方式1. 添加maven依赖2. 添加WebSocket配置类&#xff0c;定义ServerEndpointExporter Bean3. 定义WebSocket Endpoint4. 前端创建WebSocket对象 总结 前…...

鲸鱼优化算法WOA改进预告

鲸鱼优化算法&#xff08;Whale Optimization Algorithm&#xff0c;WOA&#xff09;是一种基于自然界中鲸鱼群体行为的启发式优化算法。这个算法模拟了鲸鱼的觅食行为和社会行为&#xff0c;通过模拟这些行为来解决优化问题。 以下是鲸鱼优化算法的一些关键特点和步骤&#x…...

Nightingale 夜莺监控系统 - 告警篇(3)

Author&#xff1a;rab 官方文档&#xff1a;https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v6/usage/alert/alert-rule/ 目录 前言一、配置1.1 创建钉钉机器人1.2 n9e 创建通知用户1.3 n9e 创建团队&#xff08;组&#xff09;1.4 将通知用户添加团队1.…...

【LeetCode2696】删除子串后的字符串最小长度

1、题目描述 【题目链接】 标签&#xff1a;栈 、字符串、模拟 难度&#xff1a;简单 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操作中&#xff0c;你可以从 s 中删除 任一个 “AB” 或 “CD” 子字符串。 通过执行操作…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...