ゼロで除算したときに 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 として扱えるようになりました。