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_idoriginal_amountrounded_amount
11000.451000
22000.552001
3500.68501

計算平均值並四捨五入

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 捨入的處理差異。
  • 連續的四捨五入操作可能累積誤差,應在最終結果時才進行捨入。