MySQL中的math函数主要用来处理数值类型的数据。
一、math函数的分类
二、具体方法
类型 | 函数名 | 描述 |
---|---|---|
常用函数 | ||
mod(x,y) | 返回 x 除以 y 以后的余数 | |
n div m | 整除,n 为被除数,m 为除数 | |
幂函数 | ||
sqrt(x) | 返回x的平方根,要求(x为非负数,返回null) | |
exp(x) | 返回 e 的 x 次方 | |
pow(x,y) | 返回 x 的 y 次方 | |
power(x,y) | 返回 x 的 y 次方 | |
对数函数 | ||
ln(x)或log(x) | 返回自然对数(以 e 为底的对数) | |
log(base, x) | 返回自然对数(以 base 为底的对数) | |
log10(x) | 返回以 10 为底的对数 | |
log2(x) | 返回以 2 为底的对数 | |
取整、取小数函数 | ||
ceil(x)或ceiling(x) | 向上取整 | |
floor(x) | 向下取整 | |
truncate(x [,y]) | 不四舍五入取整、取小数 | |
round(x [,y]) | 四舍五入取整、取小数 | |
特殊函数 | ||
pi() | 返回圆周率(3.141593) | |
rand(x) | 返回 0 到 1 的随机数,x是种子值 | |
sign(x) | 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1 | |
format(x,n) | 可以将数字 x 进行格式化 "#,###.##", 将 x 保留到小数点后 n 位,最后一位四舍五入。 | |
三角函数 | ||
sin(x) | 求正弦值(参数是弧度) | |
cos(x) | 求余弦值(参数是弧度) | |
cot(x) | 求余切值(参数是弧度) | |
tan(x) | 求正切值(参数是弧度) | |
radians(x) | 将角度转换为弧度 | |
degrees(x) | 将弧度转换为角度 | |
asin(x) | 求反正弦值(单位为弧度),x 为一个数值 | |
acos(x) | 求 x 的反余弦值(单位为弧度),x 为一个数值 | |
atan(x) | 求反正切值(单位为弧度),x 为一个数值 | |
列表最值函数 | ||
geatest(expr1, expr2, expr3, ...) | 返回列表中的最大值 | |
least(expr1, expr2, expr3, ...) | 返回列表中的最小值 | |
统计函数 | ||
count(expr) | 返回查询的记录总数,expr参数是一个字段或者 * 号 | |
sum(expr) | 返回指定字段的总和,expr参数是一个字段 | |
avg(expr) | 返回一个表达式的平均值,expr是一个字段 | |
max(expr) | 返回字段 expr中的最大值 | |
min(expr) | 返回字段 expr 中的最小值 |
三、实例
(1)常用函数
select
#绝对值
abs(-1), #1
#整除
10 div 5, #2
#余数
mod(5,2), #1
mod(45.5,6) #3.5
#输出结果:1|2|1|3.5
(2)幂函数
select
#x的平方根
sqrt(25), #5
sqrt(0), #0
sqrt(-25), #null
#e 的 x 次方
exp(3), #20.085536923187668
#x 的 y 次方
pow(2,3), #8
power(2,3) #8
#输出结果:5|0|null|20.085536923187668|8|8
(3)对数函数
select
#返回 2 的自然对数:
ln(2), #0.6931471805599453
#返回自然对数(以 e 为底的对数),如果带有 base 参数,则 base 为指定带底数。
log(20.085536923188), #3.0000000000000164
log(2, 4), #2
log10(100), #2
#返回以 2 为底 6 的对数:
log2(6) #2.584962500721156
#输出结果:0.6931471805599453|3.0000000000000164|2|2|2.584962500721156
(4)取整、取小数函数
select
#向上取整
ceil(1.5), #2
ceiling(1.5), #2
#向下取整
floor(1.5), #1
#四舍五入取整、取小数
round(1.23456), #1
round(52.454, 1), #52.5
#不四舍五入取整、取小数
truncate(1.23456, 0), #1
truncate(52.454, 1) #52.4
#输出结果:2|2|1|1|52.5|1|52.4
(5)特殊函数
select
#0 到 1 的随机数
rand(), #0.11078495449459641
#0 到 1 的随机数。种子数为2
rand(2), #0.6555866465490187
#返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1
sign(-10), #-1
#圆周率
pi(), #3.141593
#格式化数字 "#,###.##" 形式:
format(250500.5634, 2) #250,500.56
#输出结果:0.11078495449459641|0.6555866465490187|-1|3.141593|250,500.56
(6)三角函数
select
#正弦值(弧度)
sin(1/pi()), #0.31296179620778664
sin(radians(30)), #0.49999999999999994
#余弦值(弧度)
cos(2), #-0.4161468365471424
#余切值(弧度)
cot(6), #-3.436353004180128
#正切值(弧度)
tan(1.75), #-5.52037992250933
#角度转换为弧度
radians(180), #3.141592653589793
#弧度转换为角度
degrees(3.1415926535898), #180
#反余弦值
acos(0.25), #1.318116071652818
#反正弦值
asin(0.25), #0.25268025514207865
#反正切值
atan(2.5) #1.1902899496825317
#输出结果:0.31296179620778664|0.49999999999999994|-0.4161468365471424|-3.436353004180128|-5.52037992250933|3.141592653589793|180.0000000000004|1.318116071652818|0.25268025514207865|1.1902899496825317
(7)列表最值函数
select
#返回以下数字列表中的最大值:
greatest(3, 12, 34, 8, 25), #34
#返回以下字符串列表中的最大值:
greatest("Student", "Course", "Score"), #Student
#返回以下数字列表中的最小值:
least(3, 12, 34, 8, 25), #3
#返回以下字符串列表中的最小值:
least("Student", "Course", "Score") #Course
#输出结果:34|Student|3|Course
students 表 (id表示主键,name是中文姓名,Ename是英文姓名,score是平均成绩)
id | name | Ename | score |
---|---|---|---|
1 | 李明 | LiMing | 67 |
2 | 张三 | ZhangSan | 74 |
3 | 孙华 | SunHua | 87 |
4 | 刘平 | LiuPing | 56 |
(8)统计函数
select
#返回 students 表中 id 字段总共有多少条记录
count(id) as id_num, #4
#计算 students 表中字段 score 的总和
sum(score) as score_sum, #284
#返回 students 表中 score 字段的平均值
avg(score) as score_avg, #71
#返回数据表 students 中字段 score 的最大值
max(score) AS score_max, #87
#返回数据表 students 中字段 score 的最小值
min(score) AS score_min #56
from students
#输出结果:4|284|71|87|56
注意:
列表最值函数与统计函数中求最值的函数是有区别的,前者只对括号里面列出来的表达式起作用,后者对表中一整列起作用。
把 当作统计函数使用时,会报错‘Incorrect parameter count in the call to native function ‘greatest’’。
创建 students 表的代码
-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生中文姓名',
`Ename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生英文姓名',
`score` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '成绩',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `students` VALUES (1, '李明', 'LiMing', '67');
INSERT INTO `students` VALUES (2, '张三', 'ZhangSan', '74');
INSERT INTO `students` VALUES (3, '孙华', 'SunHua', '87');
INSERT INTO `students` VALUES (4, '刘平', 'LiuPing', '56');