SQLは使えば使うほど、奥の深さがわかってくる。
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するデータがないところには、空を割り当てるという動作をしているのだと思う。