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

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

SQL:UNIONで結果を統合するときに忘れてはいけないこと

UNION使った上に、SUMで合計を求めたときに起きたことです。

最初は気がつかないで、はまってました。

 

UNIONを使って、2つのテーブルから結果を統合して、SUMで合計を求めて表示したら、SUMを使わないでプログラムで合計した値と、結果が一致しませんでした。

SELECT SUM(amount) FROM (
SELECT amount FROM table1
UNION
SELECT amount FROM table2
) AS LIST

UNIONしないで、SQLを個別に動作させて、結果を確認すると、SUMを使わないでプログラムで合計した値と、結果が一致します。

 

原因を考えていて気づいたのは、UNIONを使うと値が同じ場合は、除外されているのではないかということでした。

値をチェックすると、同じ値が3個あり、3個の合計値が、結果の差分と一致しました。

 

値が必ず違う列があればいいので、以下のようにしたら結果が一致しました。

SELECT SUM(amount) FROM (
SELECT id, amount FROM table1
UNION
SELECT id, amount FROM table2
) AS LIST

 

 今回は、求め方が違う方法でも合計を求めていたので気づきましたが、求めていなかったら気づいていませんでした。

UNIONの結果はよく見ておかないと、予想外の結果になります。