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

Hvordan laver man en SUM på tværs af to ikke-relaterede tabeller?

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

Du kan også skrive det som:

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 bruges med en dud-betingelse, således at begge underforespørgsler ikke kunne give resultater (tomme) uden at forårsage, at den større forespørgsel ikke gav noget resultat.

Jeg tror ikke, at forespørgslen, som du har skrevet, ville have produceret det resultat, du forventede at få, fordi den laver en CROSS JOIN mellem tabel1 og tabel2, som ville puste hver SUM op med antallet af rækker i den anden tabel. Bemærk, at hvis enten tabel1/tabel2 er tom, vil CROSS JOIN få X rækker gange 0 rækker til at returnere et tomt resultat.

Se på denne SQL-violinator og sammenlign resultaterne.



  1. valider alder, før du registrerer en bruger for at kontrollere, om han er over en vis alder ved at bruge mvc

  2. Hvorfor denne databasemigreringsfejl, efter at jeg har opgraderet min version django-mptt?

  3. SCD Type 4

  4. Optimering af MySQL-forespørgsler:Er det altid muligt at optimere en forespørgsel, så den ikke bruger ALLE