SQLのSUM
関数を用いて、複数列の値の合計を求めたい場面がありました。
例えば以下のようなテーブルがあります。
id | A | B | C |
---|---|---|---|
1 | 100 | 50 | 30 |
2 | 150 | 200 | 300 |
列A,B,Cの値すべての合計を取得する場合、以下のように書くことができます。
SELECT SUM(A) + SUM(B) + SUM(C) FROM テーブル名; -- 830
また、次のように書くこともでき、コードがシンプルになります。しかし、この書き方では値にNULLが含まれている場合に注意が必要です。
SELECT SUM(A + B + C) FROM テーブル名; -- 830
値にNULLが含まれている場合
以下のテーブルのように、値にNULLが含まれている場合の対応について説明します。
id | A | B | C |
---|---|---|---|
1 | 100 | 50 | 30 |
2 | 150 | 200 | NULL |
SELECT SUM(A + B + C) FROM テーブル名; -- 180
合計を取得すると、2行目のC列がNULLのため、2行目のA,Bの値(150,200)も合計に含まれていません。
これを回避するために、COALESCE
関数を使用し、NULL値をデフォルト値に置き換えます。
SELECT SUM(COALESCE(A, 0) + COALESCE(B, 0) + COALESCE(C, 0)) FROM テーブル名; -- 530
上記を実行すると、C列2行目のNULLが0に置き換えられ、すべての行が合計されます。