はじめに
SQLでの集計時にSUMを利用するシーンは多くあると思いますが
結果に*NULL
*が返って来ることがありました。
0
として返して欲しかったのでその対処法を紹介します。
検証
そもそも、なぜ*NULL
*が返ってきてしまうのか?
SUMしてるんだからどんな事があろうと0
で返ってくるでしょ!という思い込みを技術的に検証します!
サンプルデータ
購入者 | 購入価格 |
---|---|
A | 100 |
B | 120 |
C | NULL |
A | 80 |
A | 200 |
C | NULL |
D | 0 |
全員の合計額を取得
*NULL
*は無視され、ちゃんと合計額が取得できました。
SELECT SUM(`購入価格`) FROM table_name
-- 結果:500
Cさんの合計額を取得
SUMする対象のカラムが全て*NULL
の場合は、NULL
*になりました!
SELECT SUM(`購入価格`) FROM table_name WHERE `購入者` = 'C'
-- 結果:NULL
NULLを0で返すには「COALESCE関数」を使う
COALESCE関数は*NULL
*だった場合に、引数に指定した値を表示してくれます。
これで思うようなデータになりました!
SELECT COALESCE(SUM(`購入価格`), 0) FROM table_name WHERE `購入者` = 'C'
-- 結果:0
さいごに
テーブル定義は大事!!!
でも、たまにちゃんとしていないテーブル定義もあるのでこういう小技も必要…