CodeGym /课程 /SQL SELF /SQL中的数字函数:四舍五入、取余、幂和平方根

SQL中的数字函数:四舍五入、取余、幂和平方根

SQL SELF
第 8 级, 课程 3
可用

SQL 不只是用来处理文本和表格。在真实的数据库里,经常要和价格、数量、分数、百分比、坐标打交道,也就是数字。想象一下:

  • 你要算折扣,想把金额四舍五入到整数。
  • 你想筛选出学号为偶数/奇数的学生。
  • 你在做分数分析,想知道方差的平方根。
  • 或者你在写分数计算公式,需要用到幂运算。

SQL 完全能搞定这些,不用外部编程语言——直接在查询里用内置的数学函数就行。今天我们聊聊最常用的六个:

  • ROUND() — 四舍五入
  • CEIL() — 向上取整
  • FLOOR() — 向下取整
  • MOD() — 取余
  • POWER() — 幂运算
  • SQRT() — 平方根

* 数字的四舍五入:ROUND()、CEIL()、FLOOR()*

经常在处理小数(比如 4.67891)时,需要四舍五入。比如你在算平均分、订单总价、折扣百分比等等,多余的小数位不仅“难看”,还可能让人误解。

ROUND() — 按数学规则四舍五入

ROUND(number [, digits])
  • number — 要四舍五入的数字。
  • digits(可选)— 保留几位小数。

例子:

SELECT ROUND(4.67);       -- 5
SELECT ROUND(4.6789, 2);  -- 4.68

ROUND() 跟你平时数学里的四舍五入一样:4.5 → 5,4.49 → 4。

很适合处理金额或分数,想让显示好看点:4.33333 → 4.33。

CEIL() — 向上取整到最近的整数

SELECT CEIL(4.1);  -- 5
  • 如果本来就是整数,结果不变。
  • 总是返回不小于原数的整数。

比如你要算商品分页数:21个商品,每页10个→需要3页。

FLOOR() — 向下取整

SELECT FLOOR(4.9);  -- 4
  • 返回不大于原数的整数。

用来判断“楼层”或“台阶”,看值落在哪一级。

对比:

值 ROUND() CEIL() FLOOR()
4.4 4 5 4
4.6 5 5 4
-4.6 -5 -4 -5

* 取余:MOD()*

取余有什么用?比如:

  • 判断一个数是不是偶数。
  • 按模式把行分组(比如分成3个队)。
  • 实现循环(比如“每隔五条记录”)。

语法:

MOD(dividend, divisor)

例子:

SELECT MOD(17, 5);  -- 2  (3*5 +2)
SELECT MOD(10, 3);  -- 1  (3*3 +1)

注意:余数的符号取决于第一个参数(dividend)的符号。

用法:

SELECT student_id,
       CASE WHEN MOD(student_id, 2) = 0 THEN '偶数' ELSE '奇数' END AS parity
FROM students;

* 幂运算:POWER()*

有时候不只是乘法,还要用数学公式:

  • 算利息:base * POWER(1 + rate, years)
  • 圆面积:π * r^2
  • 机器学习里的公式权重

语法:

POWER(base, exponent)

例子:

SELECT POWER(2, 3);   -- 8
SELECT POWER(5, 2);   -- 25
SELECT POWER(9, 0.5); -- 3 (平方根)

这个函数啥都能算:整数、小数、负数都行。

平方根:SQRT()

要算平方根,尤其是做统计(比如标准差),SQRT() 很有用。

SELECT SQRT(25);    -- 5
SELECT SQRT(2);     -- ~1.4142

如果传进去负数,会报错。如果有可能遇到负数,用 ABS():

SELECT SQRT(ABS(-25));  -- 5

实用场景

场景1:订单总价四舍五入

SELECT order_id, ROUND(total_price, 0) AS total_rounded
FROM orders;

场景2:算分页数

SELECT CEIL(COUNT(*) / 10.0) AS pages_needed
FROM products;

场景3:把学生分成3组

SELECT student_id,
       MOD(student_id, 3) AS group_number
FROM students;

场景4:均方根

SELECT SQRT(AVG(POWER(score, 2))) AS root_mean_square
FROM grades;

常见错误和建议

ROUND() 可以传第二个参数——要保留到小数点后几位别忘了。

MOD() 处理负数时可能会有意外结果。

POWER() 和 SQRT() 支持小数参数——需要的话用 CAST()。

确保 SQRT() 里别传负数,不然会报错。

2
任务
SQL SELF, 第 8 级, 课程 3
已锁定
将数字四舍五入到整数
将数字四舍五入到整数
2
任务
SQL SELF, 第 8 级, 课程 3
已锁定
计算圆的面积
计算圆的面积
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION