MySQLのROUND関数の使い方!数値を四捨五入する

MySQL

MySQLのROUND関数は、指定した数値データを四捨五入するために使用されます。

売上データの端数処理、平均値の表示桁数の調整、金融計算など、小数点以下の桁数を制御して数値を丸める際に非常に役立ちます。
この記事では、ROUND関数の基本的な使い方、小数点以下の桁数指定、負の数を指定した場合の挙動、そして使用する際の注意点について解説します。

ROUND関数の基本的な構文

ROUND関数の基本的な構文は以下の通りです。

ROUND(number, [decimals])
  • number: 四捨五入したい数値。カラム名、数値リテラル、または他の関数から返される数値を指定できます。
  • decimals: オプション。小数点以下の桁数を指定する整数。
    • この引数を省略した場合、ROUND関数は number最も近い整数に四捨五入します。
    • この引数を指定した場合、decimals で指定された小数点以下の桁数で四捨五入されます。

ROUND関数の使用例

いくつか具体的な例を見てみましょう。

例1:最も近い整数に四捨五入

小数点以下が .5 の場合、四捨五入の挙動はデータベースシステムやバージョンによって異なることがあります。
MySQLの ROUND関数は、一般的に「0.5を繰り上げ」という一般的な四捨五入のルールに従います。

SELECT ROUND(123.45);   -- 結果: 123
SELECT ROUND(123.50);   -- 結果: 124
SELECT ROUND(123.51);   -- 結果: 124
SELECT ROUND(123.99);   -- 結果: 124
SELECT ROUND(-123.45);  -- 結果: -123
SELECT ROUND(-123.50);  -- 結果: -124
SELECT ROUND(-123.51);  -- 結果: -124

実行すると、「123.50」は「124」、「-123.50」は「-124」のように
「0.5」以上の場合には繰上げられることが確認できました。

例2:小数点以下の桁数を指定して四捨五入

decimals引数を指定して、特定の小数点以下の桁数で丸めます。

SELECT ROUND(123.456, 2);  -- 結果: 123.46 (小数点以下2桁)
SELECT ROUND(789.1234, 3); -- 結果: 789.123 (小数点以下3桁)
SELECT ROUND(10.0001, 0);  -- 結果: 10 (小数点以下0桁、つまり整数)

確認するとdecimalsで指定した桁数までで四捨五入されました。

ROUND関数における小数点の桁数指定

decimals引数を正の数で指定すると、小数点以下の桁数を制御できます。

  • decimals = 0: 最も近い整数に四捨五入されます。
  • decimals = 1: 小数点以下第1位まで表示されます(第2位で四捨五入)。
  • decimals = 2: 小数点以下第2位まで表示されます(第3位で四捨五入)。
  • …など。
CREATE TABLE product_prices (
    product_name VARCHAR(50),
    price DECIMAL(10, 4)
);

INSERT INTO product_prices (product_name, price) VALUES
('Item A', 19.9987),
('Item B', 123.4567),
('Item C', 9.9999);

SELECT product_name, price,
       ROUND(price, 2) AS rounded_price_2_digits,
       ROUND(price, 1) AS rounded_price_1_digit
FROM product_prices;

product_pricesテーブルを作成して、アイテム名と価格(小数点含む)をテーブルに追加しています。
select文でデータを取得するときに、「名前・価格・ROUND関数で第2位指定・ROUND関数で第1位指定」といったカラムを表示しました。

実行結果の例:

product_name price rounded_price_2_digits rounded_price_1_digit
Item A 19.9987 20.00 20.0
Item B 123.4567 123.46 123.5
Item C 9.9999 10.00 10.0

実行結果を確認すると、それぞれ指定した小数点の位の箇所で四捨五入されていることが確認できました。

ROUND関数と負の数を指定した場合の挙動

decimals引数に負の数を指定すると、小数点の左側(つまり整数部分)で四捨五入を行うことができます。

  • decimals = -1: 一の位で四捨五入し、十の位で丸めます。(例: 123 → 120, 128 → 130)
  • decimals = -2: 十の位で四捨五入し、百の位で丸めます。(例: 123 → 100, 187 → 200)
SELECT ROUND(12345, -1); -- 結果: 12350
SELECT ROUND(12345, -2); -- 結果: 12300
SELECT ROUND(12356, -2); -- 結果: 12400
SELECT ROUND(12345, -3); -- 結果: 12000

decimals引数にマイナス値を指定することで、数値の指定桁から四捨五入されることが確認できました。

ROUND関数を使う際の注意点

  • データ型: ROUND関数は、数値型のカラムに対して使用します。結果のデータ型は、元の数値とdecimals引数によって決まります。浮動小数点数の場合、完全に正確な結果が得られないことがある点に留意が必要です(これは浮動小数点数の特性です)。
  • 他の丸め関数:
    • CEIL() または CEILING(): 正の無限大方向への切り上げ(例: 123.1 → 124, -123.9 → -123)
    • FLOOR(): 負の無限大方向への切り捨て(例: 123.9 → 123, -123.1 → -124)
    • TRUNCATE(): 小数点以下を指定した桁数で切り捨てる(四捨五入ではない)
      これらの関数も目的に応じて使い分けましょう。

具体的な使用例

使用例についてです。

例1:平均売上を小数点以下2桁で表示

orders テーブルの total_amount カラムから平均売上を計算し、小数点以下2桁で表示します。

SELECT ROUND(AVG(total_amount), 2) AS average_sales
FROM orders;

例2:製品価格を整数に丸めて表示

products テーブルの price カラムの価格を最も近い整数に丸めて表示します。

SELECT product_name, price, ROUND(price) AS rounded_price
FROM products;

例3:給与データを千円単位で表示

employees テーブルの salary カラムの給与を千円単位で表示したい場合(例: 345,678円 → 346,000円)。

SELECT employee_name, salary, ROUND(salary, -3) AS salary_in_thousands
FROM employees;

まとめ

MySQLのROUND関数は、数値データを柔軟に四捨五入できる非常に便利な関数です。
小数点以下の桁数を指定したり、整数部分を丸めたりすることで、表示するデータの精度を制御できました。

コメント