PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como fazer uma SOMA em duas tabelas não relacionadas?

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

Você também pode escrevê-lo como:
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;

O FULL JOIN é usado com uma condição inválida para que qualquer subconsulta não produza resultados (vazios) sem fazer com que a consulta maior não tenha resultado.

Eu não acho que a consulta como você escreveu teria produzido o resultado que você esperava obter, porque está fazendo um CROSS JOIN entre table1 e table2, que inflaria cada SUM pela contagem de linhas na outra tabela. Observe que se a tabela1/tabela2 estiver vazia, o CROSS JOIN fará com que X linhas por 0 linhas retornem um resultado vazio.

Veja este SQL Fiddle e compare os resultados.