[英]How to do a SUM across two unrelated tables?
我試圖用 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;
FULL JOIN與dud條件一起使用,因此任何子查詢都不會產生任何結果(空)而不會導致更大的查詢沒有結果。
我不認為你所寫的查詢會產生你期望獲得的結果,因為它在table1和table2之間進行CROSS JOIN,這會使每個SUM通過另一個表中的行數來膨脹。 請注意,如果table1 / table2為空,則CROSS JOIN將導致X行乘以0行以返回空結果。
看看這個SQL小提琴並比較結果。
我建議像下面這樣的東西,雖然我還沒有嘗試過。
select sum1, sum2
from
(select sum(col1) sum1 from table1),
(select sum(col1) sum2 from table2);
我們的想法是創建兩個內聯視圖,每個視圖都有一行,然后在這兩個視圖上進行笛卡爾連接,每個視圖都有一行。
要結合來自多個表的多個聚集,使用CROSS JOIN
:
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
即使源表中沒有行,也始終從任一子查詢中只有一行。 因此, CROSS JOIN
(或者甚至只是子查詢之間的一個低級逗號 - 對於具有較低優先級的交叉連接而言不是那么容易閱讀的簡寫)是最簡單的方法。
請注意,這會在單個聚合行之間產生交叉連接, 而不是多個表的各個行之間的交叉連接,就像問題中的錯誤語句一樣 - 從而相互相乘。
SELECT SUM(table1_column1 + table2_column1)
FROM table1
JOIN table2
ON table1_id= table2_id
WHERE account_no='${account_no}'
Express-JS 與 PostgreSQL 通過 postman API
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.