sql >> Databáze >  >> RDS >> PostgreSQL

Jak udělat SUM ve dvou nesouvisejících tabulkách?

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

Můžete to také napsat jako:

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 se používá s podmínkou dud, takže žádný poddotaz nemůže přinést žádné výsledky (prázdný), aniž by to způsobilo, že větší dotaz nebude mít žádný výsledek.

Nemyslím si, že by dotaz, jak jste napsal, přinesl výsledek, který jste očekávali, protože provádí CROSS JOIN mezi tabulkami1 a tabulkou2, což by zvýšilo každý SUM o počet řádků v druhé tabulce. Všimněte si, že pokud je buď tabulka1/tabulka2 prázdná, CROSS JOIN způsobí, že X řádků o 0 řádků vrátí prázdný výsledek.

Podívejte se na tento SQL Fiddle a porovnejte výsledky.



  1. Dialekt musí být explicitně poskytnut od verze 4.0.0

  2. Rozdíl mezi sys.objects, sys.system_objects a sys.all_objects na serveru SQL Server

  3. Databáze PhalconPHP se připojuje k ORM

  4. Proč MySQL používá latin1_swedish_ci jako výchozí?