sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur gör man en SUMMA över två orelaterade tabeller?

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

Du kan också skriva 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 används med ett dud-villkor så att endera underfrågan inte kunde ge några resultat (tom) utan att orsaka att den större frågan inte ger något resultat.

Jag tror inte att frågan som du har skrivit skulle ha gett det resultat du förväntade dig att få, eftersom den gör en CROSS JOIN mellan tabell1 och tabell2, vilket skulle blåsa upp varje SUMMA med antalet rader i den andra tabellen. Observera att om någon av tabell1/tabell2 är tom, kommer CROSS JOIN att göra att X rader gånger 0 rader returnerar ett tomt resultat.

Titta på denna SQL-fiol och jämför resultaten.



  1. MySQL Preferred Engine – MyISAM eller InnoDB

  2. Hur kan jag få en länk att ladda ett slumpmässigt php-ID på sidan?

  3. PHP PDO:Hur hanterar man bindValue() och reserverade nyckelord?

  4. Skriv ut resultatet av en mysqli SELECT-fråga