SQL MOD: 数値を別の数値で割った剰余を返す

概要: このチュートリアルでは、ある数値を別の数値で割った剰余を返すSQLのMOD関数の使用方法を学習します。

SQL MOD関数の紹介

MOD関数は、ある数値を別の数値で割った剰余(モジュラス)を返します。MOD関数の構文を以下に示します。

MOD(a,b);Code language: SQL (Structured Query Language) (sql)

MOD関数は2つの引数を受け取ります。

  • a は、除算する数値または数値式です。
  • b は、除数です。これも数値または、被除数を除算する式です。

bが0の場合、Oracleデータベースを除くほとんどのデータベースシステムはゼロ除算エラーを発行します。Oracleデータベースは代わりに被除数(a)を返します。

OracleとMySQLを除くほとんどのデータベースシステムは、剰余を計算するために次の公式を使用します。

a - b*(FLOOR(a/b));Code language: SQL (Structured Query Language) (sql)

次の表は、MOD関数を用いて剰余を計算した場合の結果を示しています。

abOracle、MySQLPostgreSQL、SQL Server、IBM DB2
11433
11-4-1 3
-114 2 -3
-11-4-3-3

MOD関数以外にも、Microsoft SQL、MySQL、PostgreSQLなどの一部のデータベースシステムは、MOD関数と同等の組み込みモジュロ演算子 % を提供しています。

SQL MODの例

次のステートメントは、数値33を5で除算します。その結果、商が6、剰余が4となります。

SELECT 33/5 as integer, 
       MOD(33,5) as remainder;Code language: SQL (Structured Query Language) (sql)
 integer | remainder
---------+-----------
       6 |         3
(1 row)Code language: SQL (Structured Query Language) (sql)

モジュロ演算子 (%) を使用して、13を3で割った剰余を取得することもできます。

SELECT 13 % 3 AS remainder;
Code language: SQL (Structured Query Language) (sql)
 remainder
-----------
         1
(1 row)Code language: SQL (Structured Query Language) (sql)

サンプルデータベースemployeesテーブルを見てみましょう。

employees_table

従業員を「奇数」チームと「偶数」チームの2つのチームに分割する必要があるとします。「奇数」チームには従業員IDが奇数の従業員、「偶数」チームには従業員IDが偶数の従業員が含まれます。

次のステートメントは、CASE式でMOD関数を使用して、従業員を「奇数」チームまたは「偶数」チームに割り当てます。GROUP BY句はチームごとに従業員をグループ化し、COUNT関数は各チームの従業員数を返します。

SELECT 
    CASE MOD(employee_id, 2)
        WHEN 0 THEN 'Even'
        ELSE 'Odd'
    END AS team,
    COUNT(employee_id)
FROM
    employees
GROUP BY team;Code language: SQL (Structured Query Language) (sql)
SQL MOD function example

このチュートリアルでは、SQLのMOD関数を使用して、ある数値を別の数値で割った剰余を取得する方法を学習しました。

このチュートリアルは役に立ちましたか?