ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

SQL:COALESCEを使って、NULLを0に置き換える

SQLは使えば使うほど、奥の深さがわかってくる。

f:id:AJYA:20120829215612j:plain

photo credit: kogakure via photo pin cc

 

SELECTした結果で、数値項目を必ず0にする方法

PostgreSQLでは、COALESCEを使えばいいということがわかった。

SELECT table_a.id_a, table_a.id_b, COALESCE(table_b.data_a, 0),

FROM table_a

LEFT OUTER JOIN ( SELECT table.id_b,

                  SUM(table.data) AS data_a

                  FROM table

                  GROUP BY table.id_b) AS table_b

ON table_a.id_b = table_b.id_b

としたら0になった。

 

COALESCEを使ってもならない場合

以下の書き方ではならなかった。

SELECT table_a.id_a, table_a.id_b, table_b.data_a,

FROM table_a

LEFT OUTER JOIN ( SELECT table.id_b,

                  COALESCE(SUM(table.data), 0) AS data_a

                  FROM table

                  GROUP BY table.id_b) AS table_b

ON table_a.id_b = table_b.id_b

JOINするデータがあれば0になっているが、JOINするデータがないところには、空を割り当てるという動作をしているのだと思う。