概要: このチュートリアルでは、ある数値を別の数値で割った剰余を返す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
関数を用いて剰余を計算した場合の結果を示しています。
a | b | Oracle、MySQL | PostgreSQL、SQL Server、IBM DB2 |
---|---|---|---|
11 | 4 | 3 | 3 |
11 | -4 | -1 | 3 |
-11 | 4 | 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
テーブルを見てみましょう。

従業員を「奇数」チームと「偶数」チームの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
関数を使用して、ある数値を別の数値で割った剰余を取得する方法を学習しました。