[SQL]SUMの結果がNULLになってしまう時の対処法

SQLクエリでSUMを使っているのですが計算するデータがなかった場合にNULLが結果として返ってくることがあります。
例え計算するデータがなくても、結果は「0」として返ってきてほしいですよね?
テーブル作りからやり直し!とか言われても、引き継いだのってどうしようもないじゃん!

COALESCE関数を使用する

COALESCE関数は、引数を順番に評価しNULLだった場合は次の評価を返してくれる関数です。
引数は、何個でも設定する事ができます。
まずは、テーブル構成と一般的なSQLから…

使っているDBMSによっては結果がNULLになるみたいです。
MySQLでは、数字の入っている箇所のみを計算して結果が正しく帰ってきました。

NULLだけを取得すると結果には0ではなくNULLが入ってきました。
SUMしているのであればやはりどんな状況であろうと「0」が欲しい!と思うのが普通ですよね。

NULLの値を0で取得する

そこで出てくるのが「COALESCE関数」です。
これはどういう風に使うかと言うと…まずは見てください。

SUM関数をCOALESCE関数で閉じ込めてあげます。
次は、引数として0を設定してあげるだけです。
もちろん、0以外にも10などの違う数字でも大丈夫です。

ちょっと応用して、NULLの値を指定して計算させる

データとしてはNULLとして設定されているが、このNULLは100として固定して計算させたい!という場合のやり方です。
応用も何もないのですが…

NULLだったところを、100に設定して全てのpriceを計算してみました。
レコードを変更するのはちょっと…という場合に使えそうなテクニックですね!

引数は何個でも設定することが可能

冒頭で書きましたが、COALESCE関数は引数を何個も設定できます。
どういう事?と思いますが、左がダメだったら次は右、それがダメだったら右…というように処理をしてくれます。
2つのカラムを見てどちらもNULLだったら3つ目の引数を返すというように使えます。

結果は、6番目のデータに「9999」という値が設定されました。
priceカラムを評価してNULLだったらnameカラムを評価してNULLだったら9999を返すという事になります。

NULLに悩まされていた人は是非使ってみてください!

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です