Sql 如何在两个不相关的表之间求和?

Sql 如何在两个不相关的表之间求和?,sql,postgresql,sum,Sql,Postgresql,Sum,我试着用postgres在两个不相关的表上求和。使用MySQL,我会做如下事情: SELECT SUM(table1.col1) AS sum_1, SUM(table2.col1) AS sum_2 FROM table1, table2 这应该给我一个有两列的表,分别命名为sum_1和sum_2。然而,postgres没有给我这个查询的任何结果 有什么想法吗 SELECT (SELECT SUM(table1.col1) FROM table1) AS sum_1, (SEL

我试着用postgres在两个不相关的表上求和。使用MySQL,我会做如下事情:

SELECT SUM(table1.col1) AS sum_1, SUM(table2.col1) AS sum_2 FROM table1, table2
这应该给我一个有两列的表,分别命名为sum_1和sum_2。然而,postgres没有给我这个查询的任何结果

有什么想法吗

SELECT (SELECT SUM(table1.col1) FROM table1) AS sum_1,
       (SELECT SUM(table2.col1) FROM table2) AS sum_2;
您也可以将其编写为:

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;
完全联接与dud条件一起使用,这样任一子查询都不会产生结果(空),而不会导致较大的查询没有结果

我不认为您编写的查询会产生您期望得到的结果,因为它在表1和表2之间进行交叉连接,这将通过另一个表中的行数来增加每个总和。请注意,如果table1/table2中的任何一个为空,则交叉联接将导致X行乘以0行返回空结果


看看这个并比较结果。

我建议如下,尽管我没有尝试过

select sum1, sum2
from
   (select sum(col1) sum1 from table1),
   (select sum(col1) sum2 from table2);
其思想是创建两个内联视图,每个视图有一行,然后对这两个视图进行笛卡尔连接,每个视图有一行

要组合多个表中的多个聚合,请使用:

两个子查询中始终只有一行,即使源表中没有行。因此,
交叉连接
(甚至只是子查询之间的一个很小的逗号——对于优先级较低的交叉连接来说,这不是很容易理解的缩写)是最简单的方法


请注意,这会在单个聚合行之间生成交叉连接,而不是像问题中的错误语句那样在多个表的单个行之间生成交叉连接,从而使彼此相乘。

True。Postgres给我一个和为零的结果,因为我的一个表没有任何行。但你的回答正是我想要的。是否有任何方法可以修改此选项,以便在不重复子查询的情况下从同一表中选择多个列?我已使用另一个查询进行了更新,以处理多个列
SELECT sum_1, sum_2, sum_3, sum_4
FROM 
    (SELECT sum(col1) AS sum_1, sum(col2) AS sum_2 FROM table1) t1
CROSS JOIN
    (SELECT sum(col3) AS sum_3, sum(col4) AS sum_4 FROM table2) t2