【SQL実践|実務向け】現場で役立つ!MySQLのCEILING関数で端数処理を自在に操る方法

導入

データベース開発において、金額計算や在庫管理、ページネーションの実装など、数値を切り上げたい場面は非常に多く存在します。特に「端数は常に切り上げて整数にする」というビジネスルールは頻出しますが、誤った関数を選択すると予期せぬ集計ミスに繋がります。本記事では、指定した値以上の最小の整数を取得できる「CEILING関数」について、実務での活用法を解説します。

基礎知識

MySQLには、数値の端数を調整する関数として、大きく分けて「切り上げ」「切り捨て」「四捨五入」の3種類があります。今回扱うCEILING(シーリング)関数は、その名の通り「天井」を意味し、引数よりも大きい(または等しい)最小の整数を返します。
・CEILING(X):指定した値以上の最小の整数を返す(切り上げ)
・FLOOR(X):指定した値以下の最大の整数を返す(切り捨て)
・ROUND(X):指定した値を四捨五入する
※CEILING関数はCEIL関数と完全に同じ動作をします。現場ではタイピングの速さでどちらか一方が好まれる傾向がありますが、どちらを使っても結果は変わりません。

実装/解決策

実務で最もよくあるケースは、ページネーションの総ページ数算出や、単価計算後の端数処理です。例えば、1ページに10件表示する仕様で合計が73件ある場合、73÷10=7.3となり、ページ数は8ページ必要になります。このように「割り切れない場合は必ずプラス1ページする」といったロジックを、アプリケーション側ではなくデータベース側で完結させたい場合にCEILING関数が威力を発揮します。

サンプルプログラム

以下のSQLを実行することで、正数・負数における挙動の違いを確認できます。

— 実行サンプル:様々な数値に対する切り上げ結果を確認する
SELECT
CEILING(7.3) AS 正の小数, — 8 を返します
CEILING(-4.7) AS 負の小数, — -4 を返します(0に近い方に切り上げ)
CEILING(6) AS 整数, — 6 をそのまま返します
CEILING(-5) AS 負の整数; — -5 をそのまま返します

— 実務例:総件数(73件)を1ページあたりの件数(10件)で割ったページ数を計算する
SELECT CEILING(73 / 10) AS 必要なページ数; — 結果: 8

応用・注意点

現場で陥りやすい注意点が2点あります。

1. 負数の挙動: 数学的な「切り上げ」は、数直線上で右方向(大きい数値方向)へ動かすことを指します。そのため、-4.7を切り上げると-5ではなく-4になる点に注意してください。負の数で絶対値を大きくしたい(-5にしたい)場合は、CEILINGではなくFLOORを使用する必要があります。
2. データ型の精度: 計算途中でDECIMAL型やFLOAT型が混在すると、予期せぬ桁落ちが発生することがあります。重要な計算を行う際は、必要に応じてCAST関数で型を明示的に変換してからCEILING関数を適用することをお勧めします。

これらのポイントを押さえておけば、複雑な数値計算もシンプルで堅牢なSQLで実装できるはずです。

コメント

タイトルとURLをコピーしました