sql >> Database >  >> RDS >> PostgreSQL

Hoe maak je een SOM over twee niet-gerelateerde tabellen?

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

Je kunt het ook schrijven 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;

De FULL JOIN wordt gebruikt met een dud-voorwaarde, zodat beide subquery's geen resultaten kunnen opleveren (leeg) zonder dat de grotere query geen resultaat oplevert.

Ik denk niet dat de query zoals je hebt geschreven het resultaat zou hebben opgeleverd dat je verwachtte te krijgen, omdat het een CROSS JOIN doet tussen table1 en table2, wat elke SUM zou opblazen door het aantal rijen in de andere tabel. Merk op dat als een van beide table1/table2 leeg is, de CROSS JOIN ervoor zorgt dat X rijen bij 0 rijen een leeg resultaat teruggeven.

Kijk naar deze SQL Fiddle en vergelijk de resultaten.



  1. 'fetch' in PDO krijgt maar één resultaat

  2. MySQL INSERT indien niet aanwezig (geen primaire sleutel gebruiken)

  3. PHP-conversie van datumnotatie

  4. Hoe maak ik een tabel op basis van een andere tabel?