MySQL的函数
发布日期:2025-04-18 10:16:23
浏览次数:21
分类:精选文章
本文共 4489 字,大约阅读时间需要 14 分钟。
MySQL 函数指南:分类与实用案例
MySQL 是一款功能强大的数据库管理系统,其内置的函数种类繁多,涵盖了从简单到复杂的多种操作需求。本文将详细介绍 MySQL 的函数分类及其实际应用场景。
函数分类
MySQL 函数主要可以分为以下几类:
聚合函数
聚合函数用于对一组数据进行计算,常见的包括COUNT、SUM、MAX 等。这些函数通常用于数据分析和统计。数学函数
涉及基本的算术操作,例如ADD、SUBTRACT、MULTIPLY 等,适用于数据转换和计算。字符串函数
用于字符串操作,例如CONCAT、SUBSTRING、LOWER 等,适用于文本数据处理。日期函数
提供日期的增删减查功能,例如CURDATE()、DATE_FORMAT()、NOW() 等,常用于数据时间管理。控制流函数
类似编程中的逻辑控制,例如IF、CASE、LOOP 等,用于条件判断和流程控制。窗口函数
MySQL 8.0 引入了窗口函数,类似于 Oracle 的窗口函数,用于在数据集内滑动窗口进行计算,例如ROW_NUMBER()、RANK()、SUM() OVER() 等。聚合函数
聚合函数是数据库开发中常用的工具,用于对多个数据行进行操作。GROUP_CONCAT() 是其中一个常用的聚合函数,用于将同一组数据中的多个值连接成一个字符串。
GROUP_CONCAT() 使用示例
语法:
GROUP_CONCAT([DISTINCT] 字段名 [ORDER BY 排序字段 ASC/DESC] [SEPARATOR '分隔符'])
说明:
DISTINCT可用于去除重复值。ORDER BY用于对结果进行排序。SEPARATOR用于指定分隔符,默认为逗号。
示例:
-- 将所有员工的名字合并成一行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;
数学函数
数学函数用于基本的算术运算,例如加、减、乘、除等。这些函数在数据转换和计算中非常有用。
示例
-- 计算两个数的和SELECT 5000 + 5800 AS sum_result;-- 计算两个数的差SELECT 5800 - 5000 AS difference_result;-- 计算两个数的乘积SELECT 5000 * 5800 AS product_result;-- 计算两个数的商SELECT 5800 / 5000 AS average_result;
字符串函数
字符串函数是处理文本数据的重要工具,常见的包括 CONCAT()、SUBSTRING()、LOWER() 等。
常用函数
CONCAT():连接两个或多个字符串SUBSTRING():提取字符串的子串LOWER():将字符串转换为小写UPPER():将字符串转换为大写
示例
-- 将两个字符串连接起来SELECT CONCAT('张晶晶', '王飞飞') AS full_name;-- 提取字符串的前几位SELECT SUBSTRING('张晶晶', 1, 3) AS first_three_chars;-- 转换字符串为小写SELECT LOWER('张晶晶') AS lower_name;-- 转换字符串为大写SELECT UPPER('财务部') AS upper_department; 日期函数
日期函数用于处理日期时间数据,常见的包括 CURDATE()、DATE_FORMAT()、NOW() 等。
常用函数
CURDATE():获取当前日期DATE_FORMAT():格式化日期NOW():获取当前时间戳
示例
-- 获取当前日期SELECT CURDATE() AS today_date;-- 格式化日期为 'YYYY-MM-DD' 格式SELECT DATE_FORMAT('2023-10-10', '%Y-%m-%d') AS formatted_date;-- 获取当前时间戳SELECT NOW() AS current_timestamp; 控制流函数
控制流函数模拟了编程语言中的逻辑控制,常用于条件判断和循环。
常用函数
IF:条件判断CASE:多条件判断LOOP:循环
示例
-- 条件判断IF salary > 5000, THEN '高薪员', ELSE '低薪员' END) AS salary_level;-- 多条件判断SELECT CASE WHEN payType = 1 THEN '微信支付' WHEN payType = 2 THEN '支付宝支付' WHEN payType = 3 THEN '银行卡支付' ELSE '其他支付方式' END AS payTypeStrFROM orders;
窗口函数
窗口函数是 MySQL 8.0 中的一大特点,用于在数据集中动态计算窗口内的数据。
常用函数
ROW_NUMBER():添加序号RANK():排名排序SUM() OVER():窗口聚合函数
示例
-- 添加序号SELECT dname, ename, salary, ROW_NUMBER() OVER(PARTITION BY dname ORDER BY salary DESC) AS rn FROM employee;-- 排名排序SELECT dname, ename, salary, RANK() OVER(PARTITION BY dname ORDER BY salary DESC) AS rn FROM employee;-- 窗口聚合函数SELECT dname, ename, salary, SUM(salary) OVER(PARTITION BY dname ORDER BY hiredate) AS pv1 FROM employee;
序号函数
序号函数用于添加序号,常用于排序和排名。
常用函数
ROW_NUMBER():按序号排序RANK():按排名排序DENSE_RANK():按密集排名排序
示例
-- 添加序号SELECT dname, ename, salary, ROW_NUMBER() OVER(PARTITION BY dname ORDER BY salary DESC) AS rn FROM employee;-- 添加排名SELECT dname, ename, salary, RANK() OVER(PARTITION BY dname ORDER BY salary DESC) AS rn FROM employee;-- 添加密集排名SELECT dname, ename, salary, DENSE_RANK() OVER(PARTITION BY dname ORDER BY salary DESC) AS rn FROM employee;
开窗聚合函数
窗口聚合函数用于在窗口中动态计算聚合函数值,不改变行数。
常用函数
SUM():窗口内求和AVG():窗口内求平均值MAX():窗口内求最大值MIN():窗口内求最小值
示例
-- 窗口内求和SELECT dname, ename, salary, SUM(salary) OVER(PARTITION BY dname ORDER BY hiredate) AS pv1 FROM employee;-- 窗口内求最大值SELECT dname, ename, salary, MAX(salary) OVER(PARTITION BY dname ORDER BY hiredate) AS max_salary FROM employee;
分布函数
分布函数用于按比例分布,常用于统计比例。
常用函数
CUME_DIST():按比例分布PERCENT_RANK():按百分比分布
示例
-- 按比例分布SELECT dname, ename, salary, CUME_DIST() OVER(PARTITION BY dname ORDER BY salary) AS rn1, CUME_DIST() OVER(PARTITION BY dname ORDER BY salary) AS rn2 FROM employee;-- 按百分比分布SELECT dname, ename, salary, PERCENT_RANK() OVER(PARTITION BY dname ORDER BY salary) AS rn FROM employee;
前后函数
前后函数用于获取窗口内的前后数据。
常用函数
LAG():获取前数据LEAD():获取后数据FIRST_VALUE():获取第一数据LAST_VALUE():获取最后数据
示例
-- 获取前数据SELECT dname, ename, hiredate, salary, LAG(hiredate, 1, '2000-01-01') OVER(PARTITION BY dname ORDER BY hiredate) AS last_1_time FROM employee;-- 获取后数据SELECT dname, ename, hiredate, salary, LEAD(hiredate, 1, '2000-01-01') OVER(PARTITION BY dname ORDER BY hiredate) AS next_1_time FROM employee;
其他函数
NTILE() 和 NTH_VALUE()
用于窗口内定位特定数据点。
示例
-- 获取窗口内第n个值SELECT dname, ename, salary, NTILE(3) OVER(PARTITION BY dname ORDER BY salary) AS rn FROM employee;-- 获取窗口内第n个值SELECT dname, ename, salary, NTILE(3) OVER(PARTITION BY dname ORDER BY salary) AS second_score FROM employee;
发表评论
最新留言
表示我来过!
[***.240.166.169]2026年06月22日 07时15分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP实现微信公众号网页授权
2023-03-01
PHP实现微信小程序推送消息至公众号
2023-03-01
rabbitmq逻辑与开发
2023-03-01
php实现根据身份证获取年龄
2023-03-01
PHP实现的MongoDB数据增删改查
2023-03-01
PHP实现的SSO单点登录系统,拿走就用吧
2023-03-01
php实现短信验证功能
2023-03-01
php实现逆转数组
2023-03-01
PHP实现通过geoip获取IP地理信息
2023-03-01
PHP实现页面静态化、纯静态化及伪静态化
2023-03-01
php容许ajax跨域,PHP设置允许ajax跨域请求的两种常见方法
2023-03-01
RabbitMQ进程结构分析与性能调优
2023-03-01
PHP对接百度地图
2023-03-01
PHP对表单提交特殊字符的过滤和处理
2023-03-01
php对象引用和析构函数的关系
2023-03-01
RabbitMQ HTTP 认证后端项目常见问题解决方案
2023-03-01
PHP将图片转换成base64格式(优缺点)
2023-03-01
php将多个值的数组去除重复元素
2023-03-01
php局域网上传文件_PHP如何通过CURL上传文件
2023-03-01