SQLでゼロ除算を避ける方法
仕事柄、データベースではMySQLを使うことが多い。
データベースを使ってのWEBアプリの要請は多く、いろいろな表示に対応しなければならない。
中でも進捗状況などを表示する割合(%)の計算は頻繁にでてくる数値である。
%を計算するには、2つの方法があって、アプリケーション側で計算する方法とデータベースで計算する方法がある。
%の計算は、数値Aを数値Bで割って、100をかける。
ところが、数値Bが0の時は、エラーとなってしまう。
だから、0の時には計算しないようにアプリケーション側で工夫することが多い。
でも、データベースでもエラーを避けながらこの計算ができることを覚えたので記録。
NULLIF関数を使うのである。
AとBが違う場合、NULLIF(A,B)はAを返す。AとBが等しい場合はNULLが返る。
これを利用して次のようにSQLを記述するとよい。
SELECT hoge, 100.0 * A /NULLIF(B, 0) FROM table ;
もし、Bがゼロなら、NULLIF(B, 0)はNULLを返す。
SQLでは、数値をNULLで割るとNULLが返されるのでエラーは発生しない。
ちなみにこのNULLIF関数は。ANSI標準のSQL関数。
すべての主要ベンダーがサポートする。
覚えておいて損はない。
« 国内化粧品の消費は減速 | トップページ | 333を超えるとパフォーマンスは落ちる »
「03 アプリケーション」カテゴリの記事
- YahooジオシティーズのCGIが変更になったのに気がつかなかった(2014.10.13)
- LinuxのApacheでAD認証のログイン情報を取得できた(2014.04.15)
- LibreOffice 4.1をメインに使うことにした(2014.01.13)
- 古いソフトを新しいソフトとして売る罪(2013.06.28)
- 縮小専用がMacBookAirで使えるの?!(2012.12.18)
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/514829/43344121
この記事へのトラックバック一覧です: SQLでゼロ除算を避ける方法:
コメント