SQLでデータを取得し、プログラム側でデータを加工する処理は頻繁に行われます。
実は四則演算のような計算処理であれば、データを取得する際にSQLでまかなえてしまうことをご存知でしょうか。
今回はSQLのSELECT句で計算処理を行う方法について、ご紹介していきたいと思います。
SQLのSELECT句で計算してみよう!
SQLのSELECT句で四則演算を行う方法についてご紹介していきたいと思います。
MySQLではSQLで計算を行うために下記の算術演算子が利用可能です。
- 「+」:加算
- 「-」:減算
- 「*」:乗算
- 「/」:除算
- 「DIV」:除算(整数値の返却)
- 「&」:剰余
- 「MOD」:剰余
「+」:加算
加算処理を行う際は四則演算で普段利用するように「+」記号を利用します。
使い方
SELECT A + B;
AとBには「整数」「浮動小数点数」のどちらも指定することが可能です。
サンプル
mysql> SELECT 1 + 2.56; +----------+ | 1 + 2.56 | +----------+ | 3.56 | +----------+ 1 row in set (0.00 sec)
「-」:減算
減算処理を行う際は「-」記号を利用します。
使い方
SELECT A - B;
Bの値がAよりも大きい場合にはマイナス値が出力されます。
サンプル
mysql> SELECT 1 - 2.56; +----------+ | 1 - 2.56 | +----------+ | -1.56 | +----------+ 1 row in set (0.00 sec)
「*」:乗算
乗算処理を行う際は「*」記号を利用します。
使い方
SELECT A * B;
通常の四則演算では「×」を利用しますが、SQLの計算では「*」を利用します。
サンプル
マイナスの値と浮動小数点数を乗算するサンプルです。
mysql> SELECT -3 * 2.56; +------------+ | -3 * 2.56 | +------------+ | -7.68 | +------------+ 1 row in set (0.00 sec)
「/」:除算
除算処理には2種類の方法が提供されており、まずは「/」を利用する方法をご紹介していきます。
使い方
SELECT A / B;
通常の四則演算で利用する「÷」ではなくSQLの計算では「/」を利用します。
サンプル
mysql> SELECT 100 / 3; +---------+ | 100 / 3 | +---------+ | 33.3333 | +---------+ 1 row in set (0.00 sec)
「DIV」:除算(整数値の返却)
除算処理のもう一つが「DIV」を利用した方法です。
使い方
SELECT A DIV B;
DIVを利用した場合、計算結果は整数部分のみが出力されます。
サンプル
mysql> SELECT 100 DIV 3; +-----------+ | 100 DIV 3 | +-----------+ | 33 | +-----------+ 1 row in set (0.00 sec)
「%」:剰余
剰余処理に関しても2種類の方法が提供されており、まずは「%」を利用した方法からご紹介していきます。
使い方
SELECT A % B;
サンプル
mysql> SELECT 100 % 3; +---------+ | 100 % 3 | +---------+ | 1 | +---------+ 1 row in set (0.00 sec)
「MOD」:剰余
剰余処理のもう一つが「MOD」を利用した方法です。
使い方
SELECT A MOD B;
「MOD」を利用した際と「/」を利用した結果は変わりません。
サンプル
mysql> SELECT 100 MOD 3; +-----------+ | 100 MOD 3 | +-----------+ | 1 | +-----------+ 1 row in set (0.00 sec)
テーブルから取得したデータをSQL上で計算する!
基本的なSQLでの計算方法について上述してきましたが、もちろんテーブルから取得したデータに対して計算を行うことも可能です。
ここからはそれぞれの算術演算をテーブルから取得したデータが実施してみましょう。
サンプルデータ
今回はサンプルデータとして「calculation」テーブルを下記の内容で作成しています。
calculation
+------+------+ | col1 | col2 | +------+------+ | 1 | 2.56 | | 100 | 8.47 | | -5 | 15.1 | | 10 | -5.4 | +------+------+
サンプル
では実際に、それぞれの四則演算処理をテーブルのデータを利用して、実行した結果を確認していきましょう。
基本的な記述方法は下記の通りです。
SELECT [計算式] FROM テーブル名;
サンプルでは計算元のデータを分かりやすくするために、それぞれのカラムのデータを表示するようにしています。
「+」:加算
mysql> SELECT col1, col2, col1 + col2 FROM calculation; +------+------+-------------+ | col1 | col2 | col1 + col2 | +------+------+-------------+ | 1 | 2.56 | 3.56 | | 100 | 8.47 | 108.47 | | -5 | 15.1 | 10.1 | | 10 | -5.4 | 4.6 | +------+------+-------------+ 4 rows in set (0.00 sec)
「-」:減算
mysql> SELECT col1, col2, col1 - col2 FROM calculation; +------+------+-------------+ | col1 | col2 | col1 - col2 | +------+------+-------------+ | 1 | 2.56 | -1.56 | | 100 | 8.47 | 91.53 | | -5 | 15.1 | -20.1 | | 10 | -5.4 | 15.4 | +------+------+-------------+ 4 rows in set (0.00 sec)
「*」:乗算
mysql> SELECT col1, col2, col1 * col2 FROM calculation; +------+------+-------------------+ | col1 | col2 | col1 * col2 | +------+------+-------------------+ | 1 | 2.56 | 2.56 | | 100 | 8.47 | 847.0000000000001 | | -5 | 15.1 | -75.5 | | 10 | -5.4 | -54 | +------+------+-------------------+ 4 rows in set (0.00 sec)
「/」:除算
mysql> SELECT col1, col2, col1 / col2 FROM calculation; +------+------+----------------------+ | col1 | col2 | col1 / col2 | +------+------+----------------------+ | 1 | 2.56 | 0.390625 | | 100 | 8.47 | 11.806375442739078 | | -5 | 15.1 | -0.33112582781456956 | | 10 | -5.4 | -1.8518518518518516 | +------+------+----------------------+ 4 rows in set (0.00 sec)
「DIV」:除算
mysql> SELECT col1, col2, col1 DIV col2 FROM calculation; +------+------+---------------+ | col1 | col2 | col1 DIV col2 | +------+------+---------------+ | 1 | 2.56 | 0 | | 100 | 8.47 | 11 | | -5 | 15.1 | 0 | | 10 | -5.4 | -1 | +------+------+---------------+ 4 rows in set (0.00 sec)
「&」:剰余
mysql> SELECT col1, col2, col1 % col2 FROM calculation; +------+------+-------------------+ | col1 | col2 | col1 % col2 | +------+------+-------------------+ | 1 | 2.56 | 1 | | 100 | 8.47 | 6.829999999999993 | | -5 | 15.1 | -5 | | 10 | -5.4 | 4.6 | +------+------+-------------------+ 4 rows in set (0.00 sec)
「MOD」:剰余
mysql> SELECT col1, col2, col1 MOD col2 FROM calculation; +------+------+-------------------+ | col1 | col2 | col1 MOD col2 | +------+------+-------------------+ | 1 | 2.56 | 1 | | 100 | 8.47 | 6.829999999999993 | | -5 | 15.1 | -5 | | 10 | -5.4 | 4.6 | +------+------+-------------------+ 4 rows in set (0.00 sec)
さいごに:SQLのSELECT句で計算処理を実施してみよう!
本記事ではSQLのSELECT句で計算処理を行う方法についてご紹介してきました。
計算はプログラム側ですべて行っていた方も、SQL取得時にデータ加工まで行うことは可能です。
状況によりけりではありますが、データ取得以外は全てプログラム側で行うと決めつけるのではなく、SQLで計算処理が行えることも考慮した上で最適な方法を選択出来るよう実装していきましょう。
今回ご紹介するサンプルではMySQLというデータベースを利用しています。
データベース毎に利用可能な演算子が異なることもありますので、適宜ご利用のデータベースで提供されている機能に読み替えて実施してみてください。