什么是 SQL ROUND?
ROUND 函数是 SQL 中用于调整数值数据精度的基础工具。它可将数值四舍五入到指定的小数位数,从而简化分析用的数据。
例如,使用 SQL ROUND,您可以将 3.14159 四舍五入为保留两位小数的 3.14。当无需严格精确、而近似值足以解释时,这尤其有用。
现在您已了解 SQL ROUND 是什么,接下来看看如何在不同数据库中实现它。
ROUND 语法
ROUND 函数很常见,但其语法在各数据库中并不完全一致。差异如下:
Oracle、MySQL 和 PostgreSQL 的语法
在这些数据库中,ROUND 采用简单的双参数格式:
ROUND(number, decimal_places)
其中:
- Input 指您要进行四舍五入的数字。
- Decimals 指定要保留的小数位数。
SQL Server 的语法
然而,SQL Server 在此格式上增加了变化——它有一个名为 function 的可选第三个参数:
ROUND(number, decimal_places [, function])
其中:
- 前两个参数 input 和 decimals 的作用与其他数据库相同。
- 可选的 function 参数在特定情况下指定舍入方向。
这种语法差异看似细微,但理解它至关重要,因为无论您使用何种数据库环境,它都有助于您正确应用 ROUND 函数。
SQL ROUND 函数的参数
ROUND 函数主要使用三个参数——input、decimals 和 operation。理解这些参数,您就能在 SQL 数据库中高效使用该函数。
Input 参数
Input 是您要进行四舍五入的数字。它可以是直接的数值、数据库列,或某个表达式的结果。
Decimal 参数
Decimal 参数控制将输入四舍五入到多少位小数。为正数时,按该小数位数进行四舍五入。
Function 参数
Function 参数是可选的。它决定当数值正好位于两个数的中间时的舍入方向。默认值为 0。任何其他值都会使函数执行截断(不四舍五入,直接截去)。
这些参数有助于实现对数字精确且可控的舍入。
在各类 SQL 数据库中使用 SQL ROUND 函数
您可以在多种 SQL 数据库中使用 ROUND。不过,根据数据库不同,其语法和行为可能略有差异。
以下是在几种最流行数据库中的用法:
在 Oracle 中实现
Oracle 中的 ROUND 既可用于数值数据,也可用于日期值。对数字使用时,会将其四舍五入到指定的小数位。
对于日期值,ROUND 可根据指定的格式将日期调整到最近的日、月、年等。
以下示例展示了它在 Oracle 中的用法:
假设您有如下 PRODUCTS 表。

现在,若要将 standard_cost 列四舍五入到一位小数,可按如下方式查询。
SELECT Round(STANDARD_COST, 1)
FROM PRODUCTS
舍入后的成本将如下所示。

在 MySQL 中实现
在 MySQL 中,ROUND 同样用于将数字舍入到指定精度。
示例如下:
假设您有如下 purchase_details 表。

现在,若要将 Paid_amount 列四舍五入到两位小数,可按如下方式查询。
SELECT Round(Paid_amount, 2)
AS Result
FROM purchase_details
舍入后的金额将如下所示。

在 PostgreSQL 中实现
PostgreSQL 对 ROUND 的实现也类似。以下是实现示例:
假设您有如下 reviews 表。

现在,若要将 imdb_score 列四舍五入到 0 位小数,可按如下方式查询。
SELECT Round(imdb_score, 0)
AS Result
FROM cinema.reviews
舍入后的电影评分将如下所示。

在 SQL Server 中实现
在 Microsoft SQL Server 中,ROUND 在处理数值时与 Oracle 的行为类似。
但 SQL Server 的一个独特之处在于其第三个参数 function,它允许用户指定是进行四舍五入(function = 0 或省略)还是进行截断(function = 1)。
以下示例展示了 SQL ROUND 在 SQL Server 中的用法:
假设您有如下 order_items 表。

现在,若要将 list_price 列四舍五入到一位小数,可按如下方式查询。
SELECT Round(list_price, 1,0)
AS Result
FROM sales.order_items
舍入后的价格将如下所示。

实践实现
了解参数后,就该在实践中使用 ROUND 函数了。下面看看在数据分析中如何对数字和日期进行处理。
将 ROUND 用于数字
假设您有一个名为 orderDetails 的表,其中包含一个带有多位小数的价格列。

现在,若要将 Price 列四舍五入到一位小数,可按如下方式查询。
SELECT Round(Price, 1)
AS Result
FROM orderDetails
此查询会将表中每个价格四舍五入到一位小数。
结果如下所示:

将 ROUND 用于日期
在 SQL 中,您可以将日期值舍入到特定的组成部分,如年、月、时或分。
假设您有一个名为 orders 的表。

现在,若要将 order_date 列舍入到最近的年份,可按如下方式查询:
SELECT YEAR(order_date)
AS ROUNDED_DATE
FROM sales.orders
该查询会将列中的每个日期舍入(提取)到年份。
结果如下所示:

SQL ROUND 进阶技巧
除了基础舍入外,SQL 的 ROUND 函数还可用于更高级的场景,例如:
- SQL 向上取整
- SQL 向下取整
- 按特定区间舍入
其用法如下:
SQL 的向上取整与向下取整
尽管 ROUND 会四舍五入到最接近的值,但您可以通过 CEIL 与 FLOOR 实现特定方向的取整。
CEIL 会将任意小数向上取整到下一个整数。例如,请看:
您有一张名为 reviews 的表。

如下将 CEIL 应用于 user_score 列。
Select CEIL(user_score)
FROM reviews
您将得到如下结果:

与 CEIL 相反,FLOOR 会将任意小数向下取整到最接近的整数。例如,请看这个例子。
如果将 FLOOR 应用于前述的 reviews 表,查询如下:
Select FLOOR(user_score)
FROM reviews
您将得到如下结果:

按特定区间舍入
有时,您需要按特定的区间进行舍入,如最接近的 5、10 或 100。为此,可将 ROUND 与除法和乘法结合使用。
假设您要将某个数字或列舍入到最接近的 10,可使用如下查询:
SELECT Round(number / 10) * 10
FROM table_name
此技巧有助于处理库存管理或统计分析中的问题,因为在这些场景下,将数据按特定区间分组更有意义。
与 SQL ROUND 类似的函数
除了 ROUND,SQL 中还有若干用于处理数字舍入与截断的函数。
CEIL 函数
CEILING(CEIL)函数将数字向上取整到最接近的整数或指定精度。与按最近值舍入的 ROUND 不同,CEILING 始终向上取整。
例如:CEILING(2.3) 返回 3。
当您需要确保取整结果不小于原值时,此函数尤为有用。
FLOOR 函数
FLOOR 函数将数字向下取整到最接近的整数或指定精度。
例如:FLOOR(2.7) 返回 2。
该函数确保取整结果不大于原值。
TRUNC 函数
TRUNC(截断)函数会移除数字的小数部分,向零方向截断。
例如:TRUNC(2.9) 将返回 2,而 TRUNC(-2.9) 将返回 -2。
TRUNC 会移除数字的小数部分,不一定进行四舍五入。
简而言之,CEILING、FLOOR 与 TRUNC 各有其在数据处理中的特定用途,能与 ROUND 形成互补。
借助这些函数,您可以在更广泛的场景中,以更高的精度并更契合数据语境地完成舍入任务。若想了解更多类似 SQL 技巧,请查看速查表并开始练习。
结论
把数据处理准确至关重要,而 SQL 的 ROUND 函数是确保数值易于处理的好方法。它能帮助您将数字四舍五入到所需的小数位,使数据更易理解。
如果您需要按特定方式取整,还可以使用 CEIL、FLOOR 和 TRUNC 等函数来实现。
无论您是初入门的数据从业者,还是希望打磨技能,SQL Fundamentals 与 Intermediate SQL 等课程都能提供帮助。
现在就把所学用于实践吧。祝您顺利!
我是内容策略专家,热衷于将复杂主题化繁为简。我曾帮助 Splunk、Hackernoon 和 Tiiny Host 等公司为其受众打造兼具吸引力与信息量的内容。

处理数据时,精度至关重要。但作为数据科学家或数据工程师,您每天都在应对将数据转化为洞见的各种复杂性。
既然技能总有精进空间,您可以通过使用 SQL 的 `ROUND` 函数来提升数据处理能力与信心。
本指南旨在探讨 SQL `ROUND` 函数如何在分析中微调数据精度。