PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zrobić SUMA w dwóch niepowiązanych tabelach?

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

Możesz też napisać to 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 jest używane z warunkiem niewypału, tak że każde podzapytanie może nie dać żadnych wyników (puste) bez powodowania, że ​​większe zapytanie nie ma żadnego wyniku.

Nie sądzę, aby zapytanie, które napisałeś, przyniosło oczekiwany wynik, ponieważ wykonuje CROSS JOIN między tabelą 1 i tabelą 2, co spowoduje zawyżenie każdej SUMY o liczbę wierszy w drugiej tabeli. Zauważ, że jeśli którakolwiek tabela1/tabela2 jest pusta, CROSS JOIN spowoduje, że X wierszy po 0 wierszy zwróci pusty wynik.

Spójrz na to SQL Fiddle i porównaj wyniki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać fizycznej lokalizacji wierszy (ROWID) w instrukcji DELETE?

  2. Tablice wielowymiarowe PostgreSQL

  3. Czy mogę zmienić sposób dystrybucji na istniejącym stole Citus?

  4. java.math.BigInteger nie można rzutować na java.lang.Integer

  5. Znajdź najbliższy punkt w Pandas DataFrames