本記事では、数値操作において非常に便利なMOD関数とPOWER関数について、初心者向けに徹底解説します。scottスキーマを活用し、基本的な使い方から実践的な応用例まで幅広く取り上げます。また、読み手が直感的に理解できるよう、SQLの結果例やポイント解説も交えました。
MOD関数: 剰余を簡単に求める関数
MOD関数は、数値を割った際の余りを求めるための関数です。簡単な演算に見えますが、データの分類や条件判定で頻繁に使用されます。
基本構文
MOD(被除数, 除数)
- 被除数: 割られる数
- 除数: 割る数
例:MOD(10, 3)
は1を返します(10を3で割った余りが1)。
実践例: 給与を基準にした分類
次の例では、従業員の給与(SAL)を500で割った余りを計算します。給与が500の倍数である従業員を確認するのにも役立ちます。
SELECT EMPNO, ENAME, SAL,
MOD(SAL, 500) AS SAL_MOD
FROM EMP;
結果:
EMPNO | ENAME | SAL | SAL_MOD |
---|---|---|---|
7369 | SMITH | 800 | 300 |
7499 | ALLEN | 1600 | 100 |
7521 | WARD | 1250 | 250 |
解説:
- SAL_MOD列には給与を500で割った余りが表示されます。
- 余りが0の行は給与が500の倍数であることを意味します。
応用例1: 偶数と奇数の判定
MOD関数を用いることで、数値が偶数か奇数かを簡単に判定できます。
SELECT EMPNO, ENAME, SAL,
CASE
WHEN MOD(SAL, 2) = 0 THEN '偶数'
ELSE '奇数'
END AS SAL_TYPE
FROM EMP;
EMPNO | ENAME | SAL | SAL_TYPE |
---|---|---|---|
7369 | SMITH | 800 | 偶数 |
7499 | ALLEN | 1600 | 偶数 |
7521 | WARD | 1250 | 奇数 |
応用例2: グループ分け
従業員番号(EMPNO)を使って、3つのグループに分けます。
SELECT EMPNO, ENAME,
MOD(EMPNO, 3) AS GROUP_NO
FROM EMP;
EMPNO | ENAME | GROUP_NO |
---|---|---|
7369 | SMITH | 1 |
7499 | ALLEN | 2 |
7521 | WARD | 0 |
解説:
MOD(EMPNO, 3)
の結果が0、1、2のいずれかに分類されます。- これにより、データの均等分割が可能になります。
POWER関数: 累乗を簡単に計算する関数
POWER関数は、指定した数値を指数で累乗します。指数計算に便利で、数学的な処理が求められるシナリオで頻繁に使用されます。
基本構文
POWER(数値, 指数)
- 数値: 基数(累乗される数)
- 指数: 累乗の回数
例:POWER(2, 3)
は8(2を3乗した結果)を返します。
実践例: 給与の累乗を計算
次の例では、従業員の給与を2乗(平方)と3乗(立方)に計算します。
SELECT EMPNO, ENAME, SAL,
POWER(SAL, 2) AS SAL_SQUARE,
POWER(SAL, 3) AS SAL_CUBE
FROM EMP;
結果:
EMPNO | ENAME | SAL | SAL_SQUARE | SAL_CUBE |
---|---|---|---|---|
7369 | SMITH | 800 | 640000 | 512000000 |
7499 | ALLEN | 1600 | 2560000 | 4096000000 |
7521 | WARD | 1250 | 1562500 | 1953125000 |
応用例: 名前の文字数に基づくスコア計算
従業員名の文字数(LENGTH関数)を平方してスコア化します。
SELECT ENAME, LENGTH(ENAME) AS NAME_LENGTH,
POWER(LENGTH(ENAME), 2) AS NAME_SCORE
FROM EMP;
ENAME | NAME_LENGTH | NAME_SCORE |
---|---|---|
SMITH | 5 | 25 |
ALLEN | 5 | 25 |
WARD | 4 | 16 |
MOD関数とPOWER関数を組み合わせた高度な応用
給与の3乗を計算し、その結果を特定の値で割った余りを求めます。これにより、複雑なデータ解析が可能です。
SELECT EMPNO, ENAME, SAL,
MOD(POWER(SAL, 3), 7) AS RESULT
FROM EMP;
EMPNO | ENAME | SAL | RESULT |
---|---|---|---|
7369 | SMITH | 800 | 1 |
7499 | ALLEN | 1600 | 1 |
7521 | WARD | 1250 | 1 |
注意点
- MOD関数では、除数に0を指定するとエラーが発生します(ゼロ除算エラー)。
- POWER関数で非常に大きな指数を扱うと、結果が大きくなり過ぎてオーバーフローする可能性があります。
演習問題
以下の問題に挑戦し、理解を深めましょう。
問題1:
給与(SAL)が偶数か奇数かを判定するSQLを作成してください。
問題2:
従業員番号(EMPNO)の3乗を計算し、10で割った余りを求めるSQLを作成してください。
問題3:
従業員名の文字数の3乗を計算し、その結果を5で割った余りを求めるSQLを作成してください。
まとめ
- MOD関数は剰余計算を簡単に行い、データ分類や条件判定に役立ちます。
- POWER関数は累乗計算を効率的に実現し、数学的な処理や分析に活用できます。
- 両関数を組み合わせることで、複雑な数値演算が可能になり、分析の幅が広がります。
scottスキーマを使った例を参考に、実際にSQLを実行してみてください!関数を使いこなすことで、SQLスキルをさらに向上させることができます。
[参考]
Oracle Database SQL言語リファレンス 19c
コメント