sql >> データベース >  >> RDS >> PostgreSQL

2つの無関係なテーブル間でSUMを実行するにはどうすればよいですか?

    SELECT (SELECT SUM(table1.col1) FROM table1) AS sum_1,
           (SELECT SUM(table2.col1) FROM table2) AS sum_2;
    

    次のように書くこともできます:

    SELECT t1.sum_c1, t1.sum_c2, t2.sum_t2_c1
    FROM
    (
         SELECT SUM(col1) sum_c1,
                SUM(col2) sum_c2
     FROM table1
    ) t1
    FULL OUTER JOIN
    (
         SELECT SUM(col1) sum_t2_c1
         FROM table2
    ) t2 ON 1=1;
    

    FULL JOINは不発条件で使用されるため、どちらのサブクエリでも、より大きなクエリで結果が得られずに結果が生成されない(空になる)可能性があります。

    あなたが書いたクエリは、table1とtable2の間でCROSS JOINを実行しているため、期待した結果が得られなかったと思います。これにより、各SUMが他のテーブルの行数だけ膨らみます。 table1 / table2のいずれかが空の場合、CROSSJOINによってX行×0行が空の結果を返すことに注意してください。

    この SQLFiddle を見てください。 結果を比較します。



    1. MySQLテーブルの重複を削除する方法

    2. PostgresのselectクエリのFROMでスキーマ名とテーブル名を動的に渡します

    3. ManagementStudioでテーブルのリストを表示するには権限が必要です

    4. PHPmySQL検索機能がさまざまな分野に参加