ROUND() 函數 (SQL ROUND() Function)
ROUND() 函數用於對數值進行四捨五入計算,可以指定要保留的小數位數。這是數值處理中最常用的函數之一。
這個函數在所有主流資料庫系統中都支援,但在某些邊界情況(如 .5 的處理)可能存在微小差異。
ROUND() 語法 (Syntax)
ROUND(number, decimals)
- number:要進行四捨五入的數值。
- decimals:要保留的小數位數。
0:四捨五入到個位數。- 正數:保留指定的小數位數。
- 負數:四捨五入到小數點左邊的位數(十位、百位等)。
ROUND() 函數用法範例 (Example)
基本範例
SELECT ROUND(123.456, 2); -- 結果:123.46
SELECT ROUND(123.456, 1); -- 結果:123.5
SELECT ROUND(123.456, 0); -- 結果:123
SELECT ROUND(123.456); -- 結果:123(省略第二參數時預設為 0)
SELECT ROUND(123.5, 0); -- 結果:124
SELECT ROUND(-123.456, 2); -- 結果:-123.46
負數小數位數(四捨五入到更大的位數)
SELECT ROUND(1234.567, -1); -- 結果:1230(四捨五入到十位)
SELECT ROUND(1234.567, -2); -- 結果:1200(四捨五入到百位)
SELECT ROUND(1234.567, -3); -- 結果:1000(四捨五入到千位)
SELECT ROUND(1567.89, -2); -- 結果:1600
財務報表金額處理
假設有一個 orders 資料表,需要將金額四捨五入到整數:
SELECT
order_id,
original_amount,
ROUND(original_amount, 0) AS rounded_amount
FROM
orders;
| order_id | original_amount | rounded_amount |
|---|---|---|
| 1 | 1000.45 | 1000 |
| 2 | 2000.55 | 2001 |
| 3 | 500.68 | 501 |
計算平均值並四捨五入
SELECT
category,
ROUND(AVG(price), 2) AS avg_price
FROM
products
GROUP BY
category;
計算折扣金額(保留兩位小數)
SELECT
product_name,
price,
discount_rate,
ROUND(price * discount_rate, 2) AS discount_amount,
ROUND(price * (1 - discount_rate), 2) AS final_price
FROM
products;
百分比計算
SELECT
department,
employee_count,
ROUND(employee_count * 100.0 / SUM(employee_count) OVER (), 1) AS percentage
FROM
departments;
ROUND() 與其他數值函數的比較
以數值 2.5 和 -2.5 為例:
| 函數 | 2.5 的結果 | -2.5 的結果 | 說明 |
|---|---|---|---|
| ROUND(x, 0) | 3 或 2* | -3 或 -2* | 四捨五入 |
| CEIL(x) | 3 | -2 | 無條件進位(向上) |
| FLOOR(x) | 2 | -3 | 無條件捨去(向下) |
| TRUNCATE(x, 0) | 2 | -2 | 截斷小數部分(向零) |
*注意:對於
.5的四捨五入,不同資料庫可能有不同的處理方式(銀行家捨入法 vs 傳統四捨五入)。
各資料庫的差異
MySQL
SELECT ROUND(2.5); -- 結果:3(傳統四捨五入)
SELECT ROUND(3.5); -- 結果:4
SQL Server
SELECT ROUND(2.5, 0); -- 結果:3
SELECT ROUND(2.5, 0, 1); -- 結果:2(第三參數為 1 時表示截斷而非四捨五入)
PostgreSQL
PostgreSQL 使用「銀行家捨入法」(偶數捨入),當小數部分恰好為 .5 時,會捨入到最近的偶數:
SELECT ROUND(2.5); -- 結果:2(捨入到偶數)
SELECT ROUND(3.5); -- 結果:4(捨入到偶數)
注意事項
ROUND(NULL, n)的結果是NULL。- 對於財務計算,應特別注意不同資料庫對
.5捨入的處理差異。 - 連續的四捨五入操作可能累積誤差,應在最終結果時才進行捨入。