PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie erstelle ich eine SUM über zwei nicht verwandte Tabellen?

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

Sie können es auch schreiben als:

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;

Der FULL JOIN wird mit einer Dud-Bedingung verwendet, sodass jede Unterabfrage keine Ergebnisse (leer) liefern kann, ohne dass die übergeordnete Abfrage kein Ergebnis hat.

Ich glaube nicht, dass die von Ihnen geschriebene Abfrage das erwartete Ergebnis geliefert hätte, da sie einen CROSS JOIN zwischen Tabelle1 und Tabelle2 ausführt, wodurch jede SUMME um die Anzahl der Zeilen in der anderen Tabelle erhöht würde. Beachten Sie, dass, wenn entweder Tabelle1/Tabelle2 leer ist, der CROSS JOIN bewirkt, dass X Zeilen mal 0 Zeilen ein leeres Ergebnis zurückgeben.

Sehen Sie sich diese SQL Fiddle an und vergleichen Sie die Ergebnisse.