PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment faire une somme sur deux tables non liées?

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

Vous pouvez également l'écrire comme :

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;

Le FULL JOIN est utilisé avec une condition ratée afin que l'une ou l'autre des sous-requêtes ne produise aucun résultat (vide) sans que la plus grande requête n'ait aucun résultat.

Je ne pense pas que la requête telle que vous l'avez écrite aurait produit le résultat que vous attendiez, car elle fait un CROSS JOIN entre table1 et table2, ce qui gonflerait chaque SUM du nombre de lignes de l'autre table. Notez que si l'une ou l'autre table1/table2 est vide, le CROSS JOIN fera en sorte que X lignes par 0 lignes renvoient un résultat vide.

Regardez ce SQL Fiddle et comparer les résultats.