Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLで絶対値を取得するにはABS関数を使う

SQLで値の絶対値を取得したい場合は「ABS関数」を使いましょう。

ABS関数はMySQLやOracle、PostgreSQLなど、さまざまなデータベースで使われる関数です。

この記事では、ABS関数の使い方を見ていきましょう。

ABS関数の使い方

ABS関数は次のように記述して使います。

SELECT ABS(数値);

ABS関数内に、絶対値を取得したい値を記述すればOKです。

実際に、MySQLで操作してみると次のように結果を取得できました。

mysql> SELECT ABS(12.34);
+------------+
| ABS(12.34) |
+------------+
| 12.34 |
+------------+
1 row in set (0.00 sec)

mysql> SELECT ABS(-100);
+-----------+
| ABS(-100) |
+-----------+
| 100 |
+-----------+
1 row in set (0.00 sec)

正の値は正の値のまま返しており、負の数値の場合は「-1」を乗算した上で、符号を反転させた値を返しています。

もし、ABS関数の引数にNULLを入力した場合は、NULLを返します。

mysql> SELECT ABS(NULL);
+-----------+
| ABS(NULL) |
+-----------+
| NULL |
+-----------+
1 row in set (0.01 sec)

また、文字列型といった数値以外の値を指定した場合は「0」を返すので覚えておきましょう。

mysql> SELECT ABS('potepan');
+----------------+
| ABS('potepan') |
+----------------+
| 0 |
+----------------+
1 row in set, 1 warning (0.00 sec)

浮動小数点型(FLOAT/ DOUBLE)の絶対値は誤差に注意

SQLで浮動小数点型のデータの絶対値を取得する際には、誤差が出るため注意して使いましょう

浮動小数点数で数値の絶対値は「(仮数部)×(基数)^(指数部)」となるからです。

実際に確認してみると、次のような結果を取得します。

mysql> SHOW COLUMNS FROM sample_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| data | float | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.06 sec)

mysql> SELECT ABS(data) FROM sample_table;
+--------------------+
| ABS(data) |
+--------------------+
| 123.56700134277344 |
| 231.44500732421875 |
| 156.72909545898438 |
| 98.38999938964844 |
| 226.19000244140625 |
+--------------------+
5 rows in set (0.00 sec)

このように、小数点以下が延々と続く可能性もあります。

【ABS関数を使うシーン】差を絶対値取得する

前項でABS関数の使い方を紹介しました。

ここでは、もう少し実際にABS関数を使う場面について見ていきましょう。

絶対値を取得するのは、主に「マイナス値で結果を取得したくない時」と言えます。

例えば、次のようなテーブルがあるとしましょう。

番号と名前、スコアが2つ用意されています。

mysql> SELECT * FROM my_table;
+------+--------+---------+---------+
| id | name | score01 | score02 |
+------+--------+---------+---------+
| 1 | Satou | 167 | 295 |
| 2 | Katou | 256 | 196 |
| 3 | Minami | 127 | 178 |
| 4 | Ueki | 188 | 136 |
| 5 | Inoue | 202 | 225 |
+------+--------+---------+---------+
5 rows in set (0.00 sec)

では、このスコアの差を取得してみましょう。

普通に差を取得すると次のように記述できます。

SELECT id, name, score01 - score02 AS score00 FROM my_table;

上記SQLを実行すると、次のように結果を取得できました。

mysql> SELECT id, name, score01 - score02 AS score00 FROM my_table;
+------+--------+---------+
| id | name | score00 |
+------+--------+---------+
| 1 | Satou | -128 |
| 2 | Katou | 60 |
| 3 | Minami | -51 |
| 4 | Ueki | 52 |
| 5 | Inoue | -23 |
+------+--------+---------+
5 rows in set (0.00 sec)

score02 の値の方が大きいデータのscore差は、マイナス値になっているのがわかります。

この差を絶対値で取得してみましょう。

次のように記述できます。

SELECT id, name, ABS(score01 - score02) AS score00 FROM my_table;

上記SQLを実行すると、次のように結果を取得できました。

mysql> SELECT id, name, ABS(score01 - score02) AS score00 FROM my_table;
+------+--------+---------+
| id | name | score00 |
+------+--------+---------+
| 1 | Satou | 128 |
| 2 | Katou | 60 |
| 3 | Minami | 51 |
| 4 | Ueki | 52 |
| 5 | Inoue | 23 |
+------+--------+---------+
5 rows in set (0.01 sec)

このように、スコアの値の差にマイナスがなくなりました。

マイナス値でなくなったので、スコア差が見やすくなっていますね。

まとめ

SQLで絶対値を取得する方法について解説しました。

絶対値を取得する際は、ABS関数を使いましょう

使い方はとても簡単なので、ぜひこの記事を参考に絶対値の取得方法を理解してください!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。