PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come eseguire una SOMMA su due tabelle non correlate?

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

Puoi anche scriverlo come:

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;

Il FULL JOIN viene utilizzato con una condizione dud in modo che una delle sottoquery non possa produrre risultati (vuota) senza che la query più grande non abbia alcun risultato.

Non credo che la query che hai scritto avrebbe prodotto il risultato che ti aspettavi di ottenere, perché sta eseguendo un CROSS JOIN tra table1 e table2, che gonfia ogni SUM del conteggio delle righe nell'altra tabella. Nota che se table1/table2 è vuoto, il CROSS JOIN farà in modo che X righe per 0 righe restituiscano un risultato vuoto.

Guarda questo SQL Fiddle e confronta i risultati.