【MySQL基础-17】MySQL数字函数详解:从基础到高级应用

MySQL提供了丰富的数字处理函数,这些函数在数据分析、报表生成和业务逻辑实现中扮演着重要角色。本文将全面介绍MySQL中的数字函数,包括基础运算、数值处理、数学函数以及高级应用技巧。

1. 基础算术运算函数

1.1 基本运算符

MySQL支持标准的算术运算符:

SELECT 10 + 5 AS addition,      -- 加法 (15)10 - 5 AS subtraction,   -- 减法 (5)10 * 5 AS multiplication,-- 乘法 (50)10 / 5 AS division,      -- 除法 (2.0)10 DIV 5 AS int_division,-- 整除 (2)10 % 3 AS modulus;       -- 取模 (1)

1.2 ABS() - 绝对值

SELECT ABS(-123);  -- 返回123
SELECT ABS(0);     -- 返回0
SELECT ABS(456);   -- 返回456

1.3 SIGN() - 符号函数

SELECT SIGN(-10),  -- 返回-1SIGN(0),    -- 返回0SIGN(10);   -- 返回1

2. 数值舍入与截断函数

2.1 ROUND() - 四舍五入

SELECT ROUND(123.456),      -- 123ROUND(123.456, 1),   -- 123.5ROUND(123.456, 2),   -- 123.46ROUND(123.456, -1);  -- 120

2.2 TRUNCATE() - 数值截断

SELECT TRUNCATE(123.456, 0),  -- 123TRUNCATE(123.456, 1),  -- 123.4TRUNCATE(123.456, 2),  -- 123.45TRUNCATE(123.456, -1); -- 120

2.3 CEIL()和FLOOR() - 向上/向下取整

SELECT CEIL(123.456),   -- 124CEIL(-123.456),  -- -123FLOOR(123.456),  -- 123FLOOR(-123.456); -- -124

3. 数学函数

3.1 幂运算函数

SELECT POWER(2, 3),     -- 8 (2的3次方)SQRT(16),        -- 4 (平方根)EXP(1),          -- 2.718281828459045 (e的1次方)LN(10),          -- 2.302585092994046 (自然对数)LOG10(100);      -- 2 (以10为底的对数)

3.2 三角函数

SELECT SIN(PI()/2),     -- 1COS(PI()),       -- -1TAN(PI()/4),     -- 0.9999999999999999 (近似1)ASIN(1),         -- 1.5707963267948966 (π/2)ACOS(0),         -- 1.5707963267948966 (π/2)ATAN(1);         -- 0.7853981633974483 (π/4)

3.3 角度与弧度转换

SELECT DEGREES(PI()),    -- 180RADIANS(180);     -- 3.141592653589793 (π)

4. 随机数与数值生成

4.1 RAND() - 随机数生成

SELECT RAND();              -- 0到1之间的随机数
SELECT FLOOR(RAND() * 100); -- 0到99的随机整数-- 获取随机排序的结果集
SELECT * FROM products ORDER BY RAND() LIMIT 5;

4.2 生成序列技巧

-- 生成1到10的序列
SELECT n FROM (SELECT 1 AS n UNION SELECT 2 UNION SELECT 3 UNIONSELECT 4 UNION SELECT 5 UNION SELECT 6 UNIONSELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10
) numbers;-- 使用变量生成序列
SET @row = 0;
SELECT (@row:=@row+1) AS row_number FROM table LIMIT 10;

5. 数值比较与条件函数

5.1 GREATEST()和LEAST()

SELECT GREATEST(10, 20, 30),  -- 30LEAST(10, 20, 30);     -- 10

5.2 条件数值函数

SELECT IF(score > 60, '及格', '不及格') AS result,CASE WHEN score >= 90 THEN '优秀'WHEN score >= 80 THEN '良好'WHEN score >= 60 THEN '及格'ELSE '不及格'END AS grade
FROM students;

6. 高级数值处理技巧

6.1 数值格式化

SELECT FORMAT(1234567.89, 2);  -- '1,234,567.89'

6.2 进制转换

SELECT BIN(10),    -- '1010' (二进制)OCT(10),    -- '12' (八进制)HEX(255);   -- 'FF' (十六进制)

6.3 位运算函数

SELECT 5 & 3,      -- 1 (位与)5 | 3,      -- 7 (位或)5 ^ 3,      -- 6 (位异或)~5,         -- -6 (位取反)5 << 1,     -- 10 (左移)5 >> 1;     -- 2 (右移)

7. 数值聚合函数

7.1 基本聚合函数

SELECT SUM(sales) AS total_sales,AVG(price) AS average_price,MIN(price) AS min_price,MAX(price) AS max_price,COUNT(*) AS product_count
FROM products;

7.2 高级聚合函数

SELECT VARIANCE(score) AS score_variance,STDDEV(score) AS score_stddev,GROUP_CONCAT(DISTINCT category ORDER BY category SEPARATOR ', ') AS categories
FROM products
GROUP BY department;

8. 性能优化与最佳实践

  1. 避免在WHERE子句中使用函数:这会导致索引失效

    -- 不推荐
    SELECT * FROM orders WHERE YEAR(order_date) = 2023;-- 推荐
    SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
    
  2. 使用适当的数值类型:根据数据范围选择TINYINT、INT、BIGINT或DECIMAL

  3. 批量处理代替循环:尽量减少在SQL中使用循环逻辑

  4. 注意浮点数精度问题

    -- 浮点数比较要小心
    SELECT * FROM products WHERE ABS(price - 19.99) < 0.001;
    

9. 实际应用案例

9.1 分页计算

-- 计算总页数
SELECT CEIL(COUNT(*) / 20) AS total_pages FROM products;

9.2 价格区间统计

SELECT FLOOR(price/10)*10 AS price_range,COUNT(*) AS product_count
FROM products
GROUP BY price_range
ORDER BY price_range;

9.3 数据标准化

-- 将分数标准化到0-100范围
SELECT student_id,score,(score - MIN(score) OVER()) / (MAX(score) OVER() - MIN(score) OVER()) * 100 AS normalized_score
FROM exam_results;

10. 结语

MySQL的数字函数为数据处理提供了强大的工具集。掌握这些函数不仅能提高查询效率,还能实现复杂的业务逻辑。在实际应用中,应根据具体场景选择合适的函数,并注意性能优化和精度问题。

通过合理组合这些函数,你可以解决大多数与数值处理相关的数据库问题,从简单的计算到复杂的数据分析和报表生成。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【wow-rag系列】 task05 Ollama+llamaIndex+流式部署页面

文章目录 1.构建问答引擎2.构建基于FastAPI的后台3.构建流式输出的前端 1.构建问答引擎 新建一个engine.py文件 import os from llama_index.core.node_parser import SentenceSplitter# --------------------- # step 1.设定key、模型url、推理模型名称以及embedding模型名称 …

瑞芯微RKRGA(librga)Buffer API 分析

一、Buffer API 简介 在瑞芯微官方的 librga 库的手册中&#xff0c;有两组配置 buffer 的API&#xff1a; importbuffer 方式&#xff1a; importbuffer_virtualaddr importbuffer_physicaladdr importbuffer_fd wrapbuffer 方式&#xff1a; wrapbuffer_virtualaddr wrapb…

pycharm虚拟环境项目转移后配置解释器

添加解析器提示&#xff1a;无效的 Python SDK 解决方法 在到电脑安装python解析器&#xff0c;复制&#xff1a;python.exe和pythonw.exe 项目虚拟环境venv/Scripts Python解释器添加 项目现有虚拟环境&#xff0c;就可以正常使用

【智能体系统AgentOS】核心九:MCP工具

MCP&#xff08;Master Control Program&#xff09;是计算机控制系统中的核心部分&#xff0c;负责协调和管理整个系统的功能模块。不同的MCP可能会根据具体的应用场景有所不同&#xff0c;但通常有以下几类功能模块&#xff1a; 1. 输入输出&#xff08;I/O&#xff09;模块…

强化学习课程:stanford_cs234 学习笔记(2)introduction to RL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言5、强化学习课程大纲5.1 课程内容主&#xff1a;5.2 马尔可夫决策过程&#xff1a;5.2.1 马尔可夫性 markov propterty5.2.2 马尔可夫过程 markov process5.2.3…

[Linux]在vim中批量注释与批量取消注释

1.在vim中批量注释的步骤&#xff1a; 1.在normal模式下按Ctrl v &#xff0c;进入V-BLOCK模式 2.按 J 键 或 K 键选择要注释的内容&#xff0c;J向上K向下 我们给第5&#xff0c;6&#xff0c;7行进行注释 3.按住shift i进入插入模式&#xff0c;输入 // 4.点击ESC键&…

16-CSS3新增选择器

知识目标 掌握属性选择器的使用掌握关系选择器的使用掌握结构化伪类选择器的使用掌握伪元素选择器的使用 如何减少文档内class属性和id属性的定义&#xff0c;使文档变得更加简洁&#xff1f; 可以通过属性选择器、关系选择器、结构化伪类选择器、伪元素选择器。 1. 属性选择…

Spring Initializr搭建spring boot项目

介绍 Spring Initializr 是一个用于快速生成 Spring Boot 项目结构的工具。它为开发者提供了一种便捷的方式&#xff0c;可以从预先定义的模板中创建一个新的 Spring Boot 应用程序&#xff0c;从而节省了从头开始设置项目的大量时间。 使用 Spring Initializr&#xff0c;你…

C++中的new、malloc、realloc、calloc——特点?函数原型?释放方式?区别?校招面试常问内容?

作者&#xff1a;求一个demo 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 内容通俗易懂&#xff0c;没有废话&#xff0c;文章最后是面试常问内容&#xff08;建议通过标题目录学习&#xff09; 废话不多…

【字符设备驱动开发–IMX6ULL】(一)简介

【字符设备驱动开发–IMX6ULL】&#xff08;一&#xff09;简介 一、Linux驱动与裸机开发区别 1.裸机驱动开发回顾 ​ 1、底层&#xff0c;跟寄存器打交道&#xff0c;有些MCU提供了库。 spi.c&#xff1a;主机驱动&#xff08;换成任何一个设备之后只需要调用此文件里面的…

Spring AI MCP 架构详解

Spring AI MCP 架构详解 1.什么是MCP? MCP 是一种开放协议&#xff0c;它对应用程序向大语言模型&#xff08;LLMs&#xff09;提供上下文信息的方式进行了标准化。可以把 MCP 想象成人工智能应用程序的 USB-C 接口。就像 USB-C 为将设备连接到各种外围设备和配件提供了一种…

【Java】IO流

一、IO流的定义 二、 字节流 &#xff08;一&#xff09;FileOutputStream 操作本地文件的字节输出流&#xff0c;可以把程序中的数据写到本地文件中。 1、书写步骤 注&#xff1a; &#xff08;1&#xff09;创建字节输出流对象&#xff1a; 参数是字符串表示的路径或者…

Java 大视界 -- Java 大数据机器学习模型在电商商品推荐冷启动问题中的解决策略(160)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

MySQL———作业实验

一、创建数据库表 1.创建数据库 mysql> create database mydb11_stu; mysql> use mydb11_stu; 2.建表 &#xff08;1&#xff09;创建student表 mysql> create table student ( -> id int(10) not null unique primary key, -> name varch…

深度解析衡石科技HENGSHI SENSE嵌入式分析能力:如何实现3天快速集成

嵌入式分析成为现代SaaS的核心竞争力 在当今SaaS市场竞争中&#xff0c;数据分析能力已成为产品差异化的关键因素。根据Bessemer Venture Partners的最新调研&#xff0c;拥有深度嵌入式分析功能的SaaS产品&#xff0c;其客户留存率比行业平均水平高出23%&#xff0c;ARR增长速…

Day17 -实例:利用不同语言不同框架的特征 进行识别

前置&#xff1a;我们所需的web站点&#xff0c;都可以利用fofa去搜索&#xff0c;例如&#xff1a;app"flask"这样的语句去找对应的站点&#xff0c;找到后&#xff0c;我们模拟不知道是什么框架&#xff0c;再根据特征去判断它的框架。 ***利用工具可以再去结合大…

Linux输入系统应用编程

什么是输入系统 Linux 输入系统是处理用户输入设备(如键盘、鼠标、触摸屏、游戏手柄等)的软件架构。在应用编程层面&#xff0c;它提供了与这些输入设备交互的接口。 主要组成部分 输入设备驱动层&#xff1a;直接与硬件交互的驱动程序 输入核心层&#xff1a;内核中的输入子…

【C++初阶】---类和对象(下)

1.再探构造函数&#xff08;初始化链表&#xff09; •之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;构造函数初始化还有⼀种⽅式&#xff0c;就是初始化列表&#xff0c;初始化列表的使⽤⽅式是以⼀个冒号开始&#xff0c;接着是⼀个以逗…

Ubuntu 22.04.5 LTS 设置时间同步 ntp

提示&#xff1a;文章为操作记录&#xff0c;以备下次使用 文章目录 前言一、设置ntp1.1替换国内源1.2 更新源&安装1.3 验证 前言 设置时间同步&#xff0c;环境版本 # cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.5 LTS" NAME"Ubuntu" VERSION_…

飞书电子表格自建应用

背景 coze官方的插件不支持更多的飞书电子表格操作&#xff0c;因为需要自建应用 飞书创建文件夹 创建应用 开发者后台 - 飞书开放平台 添加机器人 添加权限 创建群 添加刚刚创建的机器人到群里 文件夹邀请群 创建好后&#xff0c;就可以拿到id和key 参考教程&#xff1a; 创…