« 国内化粧品の消費は減速 | トップページ | 333を超えるとパフォーマンスは落ちる »

2008年8月24日 (日)

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 アプリケーション」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/514829/43344121

この記事へのトラックバック一覧です: SQLでゼロ除算を避ける方法:

« 国内化粧品の消費は減速 | トップページ | 333を超えるとパフォーマンスは落ちる »