NULLを考える②(COALESCE関数)
前回NULLの扱いで、NULLIF関数の話をしました。
これを使うと簡単に0除算エラーの対策が可能になります。
SELECT col_a / NULLIF(col_b, 0) FROM SomeTable
演算でNULLが来た場合はNULLを返す仕様をそのまま利用する形です。
基本形はこれだけど、これだと結果が NULLが返ります。C#であればそのまま結果NULLを自作関数に入れて数値等へ変換しちゃう場合が多いですが、NULL許容ではない場合だと少し不便ですよね。そうすると、NULLの場合の条件分岐が必要なので、以下のように長くなってしまいます。
SELECT CASE col_b WHEN 0 THEN 0 ELSE col_a / col_b END FROM SomeTable
この場合、COALESCE 関数とNULLIF関数を併用すると簡単に解決します。
COALESCE 関数は、与えられた引数で最初に見つけたNULL以外の引数を返します。つまり、以下の場合は「3」が返ります。
SELECT COALESCE(NULL,NULL,3)
つまり、以下のように簡単になるわけです。
-- col_bが0の場合、0になる -- COALESCE関数の第二引数を変更することで、-1とかにもできる SELECT COALESCE(col_a / NULLIF(col_b, 0), 0) FROM SomeTable
何かの比率を求める、ってのはよくあることなので、この手法は結構使う形ですので覚えておくと良いでしょう。