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関数。
すべての主要ベンダーがサポートする。
覚えておいて損はない。