ゼロで除算したときに NULL にする - SQL

SPECIAL


ゼロで除算された行を NULL にする

ビューを作っていたときのこと、動作検証もかねて MySQL で次の SQL を実行したところ、結果が NULL になりました。

SELECT 10/0

たしか、こういうときは除算エラーになるはずと思って、同じ SQL 文を Microsoft SQL Server で実行してみたところ、こちらの場合は '0 除算エラー' というエラーが出力されました。

今回は MySQL 上のビューを作っていたので、気にせずそのまま 0 で割ってしまっても良さそうでしたけど、やっぱり 0 で割るというのはあまり心地良くないところなので、本来だったらどうするべきか、調べてみることにしました。

 

そうしたところ、SQL にはどうやら ISNULL という関数があるようです。

この関数は ISNULL(値, 条件値) というように使用して、"値" が "条件値" と一致しなければ "値" を、一致した場合は NULL になるという性質の関数だそうです。

割り算のときに、割る数に ISNULL 関数を使用すれば、0 の時には NULL で割るということが可能になります。

 

たとえば、"合計" と "サンプル数" というフィールドを持った "テーブル" があったとして、その "グループ" 毎の平均を求めるような場合は、次のような感じになります。

SELECT "合計" / ISNULL("サンプル数", 0) FROM "テーブル" GROUP BY "グループ"

これで、たとえば "サンプル数" が 0 のグループがあったとしても、0 ではなく NULL で割ってくれるようになります。

そして、NULL で割られた計算結果は、MySQL でも Microsoft SQL Server でも NULL になってくれるようだったので、これで 0 除算もエラーではなく NULL として扱えるようになりました。