MariaDBでSQLクエリをもっと効率的に!FLOOR関数によるスマートな記述テクニック


MariaDBのFLOOR関数は、引数として渡された数値を、小数点以下を切り捨てた最大の整数を返します。つまり、小数点以下の部分を切り捨てて、最も近い整数を取得します。

構文

FLOOR(数値)

引数

  • 数値: 計算対象となる数値

戻り値

  • 数値: 小数点以下を切り捨てた最大の整数

使い方

FLOOR関数は、様々な場面で役立ちます。以下に、具体的な使用例をいくつか紹介します。

例1:数値の切り捨て

SELECT FLOOR(12.34);

このクエリは、12.34の小数点以下を切り捨て、12を返します。

例2:小数点以下の桁数による切り捨て

SELECT FLOOR(12.3456 * 100) / 100;

このクエリは、12.3456を100倍し、小数点以下第2位まで切り捨てて、12.34を返します。

例3:日付の切り捨て

SELECT FLOOR(DATE('2023-10-05 14:23:56'));

このクエリは、2023-10-05 14:23:56の日付部分を切り捨てて、2023-10-05を返します。

注意事項

  • FLOOR関数は、引数としてNULLを渡された場合、NULLを返します。
  • FLOOR関数は、引数として渡された数値の種類によって、戻り値の型が異なります。
    • 整数の場合:整数型の値を返します。
    • 浮動小数点の場合:浮動小数点型の値を返します。
  • FLOOR関数とCEILING関数は、さまざまな数学関数と組み合わせて使用することができます。
  • MariaDBには、FLOOR関数と同様に動作するCEILING関数もあります。CEILING関数は、引数として渡された数値を、小数点以下を切り上げて最も近い整数を返します。

FLOOR関数は、MariaDBでよく使用される関数の一つです。小数点以下の部分を切り捨てて、最も近い整数を取得したい場合に役立ちます。構文はシンプルで、様々な場面で活用できます。



SELECT
  SUM(売上金額) AS 合計売上,
  AVG(売上金額) AS 平均売上
FROM 売上データ
WHERE 売上日 >= '2023-01-01' AND 売上日 <= '2023-12-31';

例2:小数点以下の桁数による合計金額の切り捨て

SELECT
  ROUND(SUM(売上金額) / 100, 2) AS 合計売上_切り捨て
FROM 売上データ
WHERE 売上日 >= '2023-01-01' AND 売上日 <= '2023-12-31';
SELECT
  AVG(年齢) AS 平均年齢,
  SUM(CASE WHEN 年齢 < 30 THEN 1 ELSE 0 END) AS 30歳未満人数,
  SUM(CASE WHEN 年齢 >= 30 THEN 1 ELSE 0 END) AS 30歳以上人数
FROM 顧客データ;


MariaDBのFLOOR関数には、状況に応じて以下の代替手段が考えられます。

CEILING関数


  • CEILING(12.34) = 13
  • 構文
    CEILING(数値)
  • 用途
    引数を小数点以下で切り上げ、最も近い整数に変換します。

ROUND関数


  • ROUND(12.34, 1) = 12.3
  • 構文
    ROUND(数値, 桁数)
  • 用途
    引数を指定した桁数で四捨五入します。

CAST関数と整数リテラル


  • CAST(12.34 AS INTEGER) = 12 または 12.34 | 0 = 12
  • 構文
    CAST(数値 AS INTEGER) または 数値 | 0
  • 用途
    引数を整数に変換してから、小数点以下の部分を切り捨てます。

CASE式

  • 構文
  • 用途
    条件に応じて、引数を整数に変換します。
SELECT
  CASE WHEN 小数点以下(数値) = 0 THEN 数値
       ELSE FLOOR(数値)
  END AS 切り捨て結果
FROM ...;

  • 上記のクエリは、引数が整数の場合にはそのまま返 し、そうでない場合はFLOOR関数で切り捨てた値を返します。

選択ガイド

状況に応じて、適切な代替手段を選択することが重要です。

  • 条件に応じて処理を分けたい場合
    CASE式を使用します。
  • 引数を単純に整数に変換したい場合
    CAST関数または整数リテラルを使用します。
  • 小数点以下を指定の桁数で四捨五入したい場合
    ROUND関数を使用します。
  • 小数点以下を切り上げたい場合
    CEILING関数を使用します。
  • どの代替手段を選択するかは、パフォーマンス、可読性、メンテナンス性などを考慮する必要があります。
  • 上記以外にも、状況によっては独自のカスタム関数を作成することもできます。