Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
ABS / MOD / POWER
数値演算を行う基本的な関数です。絶対値・剰余・べき乗・平方根・符号など、集計以外の数値処理に使われます。
構文
-- ABS: 絶対値を返します。 ABS(数値) -- MOD: 剰余(余り)を返します。 MOD(数値, 除数) 数値 % 除数 -- 演算子での記述 -- POWER: べき乗を返します。 POWER(底, 指数) POW(底, 指数) -- MySQLでの別名 -- SQRT: 平方根を返します。 SQRT(数値) -- SIGN: 数値の符号を返します(正:1, 零:0, 負:-1)。 SIGN(数値)
構文一覧
| 関数・演算子 | 概要 |
|---|---|
| ABS(n) | nの絶対値を返します。負の数を正にします。 |
| MOD(n, m) / n % m | nをmで割った余りを返します。 |
| POWER(n, e) / POW(n, e) | nのe乗を返します。 |
| SQRT(n) | nの正の平方根を返します。nが負の場合はNULLまたはエラーになります。 |
| SIGN(n) | nが正なら1、0なら0、負なら-1を返します。 |
サンプルコード
-- 売上目標との差額を絶対値で比較します。
SELECT
店舗名,
売上金額,
目標金額,
売上金額 - 目標金額 AS 差額,
ABS(売上金額 - 目標金額) AS 差額_絶対値,
SIGN(売上金額 - 目標金額) AS 達成状況 -- 1:超過 0:ちょうど -1:未達
FROM 店舗売上;
-- 注文IDの奇数・偶数で処理を分けます(MOD)。
SELECT
注文ID,
顧客名,
CASE MOD(注文ID, 2)
WHEN 0 THEN '偶数ID'
ELSE '奇数ID'
END AS ID分類
FROM 注文;
-- 複利計算で5年後の積立金額を求めます(POWER)。
SELECT
顧客名,
積立元本,
ROUND(積立元本 * POWER(1.03, 5), 0) AS 5年後_3%複利
FROM 積立プラン;
-- 注文件数の平方根を計算します(SQRT)。
SELECT
カテゴリ名,
COUNT(*) AS 注文件数,
ROUND(SQRT(COUNT(*)), 2) AS 件数の平方根
FROM 注文
GROUP BY カテゴリ名;
実行結果
-- 売上と目標の比較。 店舗名 | 売上金額 | 目標金額 | 差額 | 差額_絶対値 | 達成状況 ------------+-----------+-----------+-----------+-------------+--------- 秋葉原店 | 3200000 | 3000000 | 200000 | 200000 | 1 新宿店 | 2600000 | 2800000 | -200000 | 200000 | -1 なんば店 | 2850000 | 2850000 | 0 | 0 | 0 -- 5年後の積立金額(元本100万円・3%複利)。 顧客名 | 積立元本 | 5年後_3%複利 -----------+-----------+------------- 山田 太郎 | 1000000 | 1159274 鈴木 花子 | 2000000 | 2318548
データベース別の書き方
『ABS』『POWER』『SQRT』『SIGN』は MySQL・PostgreSQL・Oracle・SQL Server・SQLite で共通して使用できます。
-- 全データベース共通の構文です。 SELECT ABS(売上金額 - 目標金額) AS 差額_絶対値 FROM 店舗売上; SELECT POWER(1.03, 5) AS 複利係数;
『MOD』関数は MySQL・PostgreSQL・Oracle で使用できます。SQL Server では『MOD』関数がないため、『%』演算子を使います。
-- MySQL・PostgreSQL・Oracle: MOD 関数が使えます。 SELECT MOD(注文ID, 2) AS 余り FROM 注文; -- SQL Server: % 演算子を使います。 SELECT 注文ID % 2 AS 余り FROM 注文;
MySQL の別名『POW』は MySQL 独自です。PostgreSQL・Oracle・SQL Server では『POWER』を使ってください。
概要
『MOD』はゼロ除算を行うとNULLを返す(MySQLなど)か、エラーになる(DBMSによる)ため注意してください。偶数・奇数の判定や周期的な処理のグループ分けによく使われます。
『SIGN』はCASE式の代わりに正・零・負の3値を数値で返すため、集計と組み合わせて「目標達成店舗の件数」などを COUNT(CASE WHEN ... END) より簡潔に書ける場面があります。
『SQRT』に負の数を渡すとMySQLはNULLを返し、SQL ServerはエラーになるなどDBMSで挙動が異なります。数値の丸め処理は『ROUND / CEIL / FLOOR』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。