Developer

【SQL基礎】算術関数
2021.02.28
Lv1

【SQL基礎】算術関数

本項からは算術関数等のいろいろな関数について説明していきます。


算術関数とは

関数については、これまでも度々でてきましたが(集約関数、述語のところ等)、SQLにはその他にも便利なツールとして様々な関数が用意されています。
軽く関数についておさらいしておくと、引数を関数に渡してあげると、その値を元に処理した結果を戻り値として返してくれるものが関数です。
その中でも、絶対値を求めたり、四捨五入や切り捨て切り上げなどをしてくれたりなどの、数値の計算を行うための関数のことを算術関数といいます。

それでは実際にいくつかの算術関数を見ていきましょう。


POW関数(べき乗)

ある数値x(被乗数)のy乗(乗数)を求めたいときはPOW関数を使用します。
書式は下記になります。

POW(被乗数, 乗数)

実際に使ってみましょう。

SELECT POW(2, 2), POW(2, -2);

それぞれ、2の2乗、2の-2乗の値が求められていることが確認できました。


ROUND関数(四捨五入)

MySQLで四捨五入をしたい場合は、ROUND関数を使うと指定した桁数で四捨五入をしてくれます。
書式は下記になります。

ROUND(対象の数値, 有効桁数)

有効桁数は省略することが可能です。省略した場合は0が設定されます。

実際に使ってみましょう

SELECT ROUND(1.4), ROUND(1.5);
SELECT ROUND(1.124, 2), ROUND(1.125, 2);
SELECT ROUND(140.12, -2),ROUND(150.12, -2);

少数桁を指定して四捨五入したい場合は有効桁数に正の値、整数部分を指定する場合は負の値を指定します。


TRUNCATE関数(切り捨て、切り上げ)

桁数を指定して切り捨てたい場合は、TRUNCATE関数を使用します。
書式は下記になります。

TRUNCATE(対象の数値, 有効桁数)

ROUND関数とは違いこちらは有効桁数を省略することはできません。

SELECT TRUNCATE(1.123, 0), TRUNCATE(1.999, 0);
SELECT TRUNCATE(1.123, 1), TRUNCATE(1.999, 1);
SELECT TRUNCATE(123, -1), TRUNCATE(129, -1);

ROUND関数と同様に。少数桁を指定して切り捨てしたい場合は有効桁数に正の値、整数部分を指定する場合は負の値を指定します。

また、TRUNCATE関数は切り捨てるだけでなく切り上げをしたい場合にも使用します。
実はMySQLには切り上げ関数というのは用意されていません。
その為、切り上げをするときは少々工夫してあげる必要があります。
例えば小数点第1位で切り上げたい場合は以下のようにすると切り上げをすることができます。

TRUNCATE(1.123 + 0.9, 0)

要するに、有効桁数に応じた桁数部分に9足してから切り捨てをします。
小数点第1位で切り上げたい場合は0.9を、小数点第2位では0.09を、1の位で切り上げたい場合は9を、10の位では90を足すといった具合です。
では、実際にやってみましょう

SELECT TRUNCATE(1.123 + 0.9, 0);
SELECT TRUNCATE(1.123 + 0.009, 2);
SELECT TRUNCATE(139.12 + 9, -1);

きちんと切り上げられていることが確認できました。


今回の学習ポイント

・算術関数は数値計算に関わる関数のこと
・ROUND関数の有効桁数は省略できる
・切り上げの関数は存在しないので工夫が必要。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

[sql] CREATE DATABASE worldcup2014;

use worldcup2014

source C:\worldcup2014.sql
[/sql]

1.ワールドカップ出場選手の身長(players.height)の平均を小数点第3位を四捨五入して表示してください。

答え
[sql] SELECT ROUND(AVG(height), 2)
FROM players;
[/sql]

平均を求める場合はAVG関数を使用すればよかったので、対象の数値にはAVGを引数として渡し
小数点第3位を四捨五入したいので有効桁数には2を渡します。

2.TRUNCATE関数とPOW関数を使用しワールドカップ出場選手の体重(players.weight)の平均を小数点第2位を切り上げて表示してください。

答え
[sql] SELECT TRUNCATE(AVG(weight) + (9 * POW(10, -2)), 1)
FROM players;
[/sql]

TRUNCATE関数を使って切り上げたい場合は、いくつか例を挙げると
対象の数値に、小数点第1位で切り上げたい場合は0.9を、小数点第2位では0.09を、1の位で切り上げたい場合は9を、10の位では90を足す必要がありました。
今回は、小数点第2位で切り上げたいので

[sql] TRUNCATE(平均値 + 0.09, 1);
[/sql]

になります。
この0.09の部分をもう少し汎用性を持たせた式にすると下記のようにできます

[sql] TRUNCATE(平均値 + (9 * POW(10, -n-1)), n);
[/sql]

今回で言えば、0.09は9に10の-2乗をかけたものなので9 * POW(10, -2)になります。

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ