mysql如何进行算术计算_mysql数学运算语法

来源:这里教程网 时间:2026-02-28 20:44:42 作者:

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()
等聚合函数内部,也可以作用于聚合结果之后。

关键区别:

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)
看一眼实际值。

相关推荐