MySQL支持直接用+、-、*、/进行四则运算,需确保操作数为数字类型;隐式转换有风险,推荐显式CAST;除法用/,整除用DIV;NULL参与运算结果为NULL;取模用%或MOD(),幂运算用POW();聚合中运算顺序影响结果,WHERE中慎用浮点比较。

MySQL 里直接用 +、-、*、/ 就能算数
MySQL 支持标准的四则运算符,不需要额外函数。只要字段或值是数字类型(比如 INT、DECIMAL、FLOAT),就可以在 SELECT、WHERE、ORDER BY 甚至 UPDATE 中直接参与计算。
常见错误现象:SELECT price + '10' —— 字符串 '10' 会被隐式转成数字,但若内容含非数字字符(如 '10元'),结果变成 0 或警告;更稳妥的是显式转换:CAST('10' AS DECIMAL)。
- 除法
/返回DECIMAL或DOUBLE,不是整数;想取整用DIV(如7 DIV 2 → 3) -
NULL参与任何算术运算,结果都是NULL;需要先用IFNULL()或COALESCE()处理 - 小数精度问题:
DECIMAL(10,2)字段做乘除后可能超位数,MySQL 会四舍五入,不是截断
遇到负数、取模、幂运算怎么办
MySQL 提供了基础数学函数覆盖这些场景,不用自己拼逻辑。
使用场景:计算折扣后价格(含负号)、分页余数判断、指数增长模拟等。
- 取负用
-前缀即可:SELECT -amount;别写成NEG(amount)(已废弃) - 取模用
%或MOD()函数,二者等价;5 % 2 → 1,注意负数模运算结果符号跟随被除数(-5 % 2 → -1) - 幂运算用
POW(x, y)或POWER(x, y);POW(2, 3) → 8;不支持**语法(那是 PostgreSQL/Python 的)
聚合计算中怎么加减乘除
算术运算可以嵌套在 SUM()、AVG()、COUNT() 等聚合函数内部,也可以作用于聚合结果之后。
关键区别:
PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书
-
SUM(price * quantity):先逐行算金额,再求和(正确) -
SUM(price) * SUM(quantity):分别求和再相乘(业务上通常错误) -
AVG(price / 100)和AVG(price) / 100数学结果相同,但前者每行都除,后者只除一次;有精度差异时表现不同
性能影响:带运算的聚合列无法走索引覆盖(除非建函数索引,MySQL 8.0.13+ 支持 CREATE INDEX idx ON t ((price * quantity)))。
WHERE 条件里做数学比较容易踩什么坑
最常出问题的地方不是语法,而是数据类型隐式转换和浮点误差。
错误示例:WHERE price * 0.9 > 100 看似没问题,但如果 price 是 DECIMAL(10,2),乘法后可能变成 DECIMAL(12,3),而比较时 MySQL 可能临时转成 DOUBLE 引入浮点误差。
- 浮点字段(
FLOAT/DOUBLE)慎用于精确比较,比如WHERE score = 99.5可能查不到——改用范围:ABS(score - 99.5) - 字符串字段参与计算前务必确认内容纯数字,否则静默转成
0;可用price REGEXP '^[0-9.]+$'过滤 - 日期也能“算”:
order_date + INTERVAL 7 DAY是合法表达式,但别对DATETIME直接加数字(order_date + 1是错的)
真正麻烦的不是语法会不会写,而是哪一步悄悄丢了精度、哪一列其实藏了空格或单位字符、哪个隐式转换正在拖慢查询。动手前先 SELECT price, LENGTH(price), DUMP(price) 看一眼实际值。









